How to set default values for Angular 2 component properties?

前端 未结 2 348
有刺的猬
有刺的猬 2020-12-13 11:44

When writing Angular 2.0 components, how does one set default values for properties?

For example - I want to set foo to \'bar\' by default,

相关标签:
2条回答
  • 2020-12-13 12:10

    Here is the best solution for this. (ANGULAR All Version)

    Addressing solution: To set a default value for @Input variable. If no value passed to that input variable then It will take the default value.

    I have provided solution for this kind of similar question. You can find the full solution from here

    export class CarComponent implements OnInit {
      private _defaultCar: car = {
        // default isCar is true
        isCar: true,
        // default wheels  will be 4
        wheels: 4
      };
    
      @Input() newCar: car = {};
    
      constructor() {}
    
      ngOnInit(): void {
    
       // this will concate both the objects and the object declared later (ie.. ...this.newCar )
       // will overwrite the default value. ONLY AND ONLY IF DEFAULT VALUE IS PRESENT
    
        this.newCar = { ...this._defaultCar, ...this.newCar };
       //  console.log(this.newCar);
      }
    }
    
    0 讨论(0)
  • 2020-12-13 12:20

    That is interesting subject. You can play around with two lifecycle hooks to figure out how it works: ngOnChanges and ngOnInit.

    Basically when you set default value to Input that's mean it will be used only in case there will be no value coming on that component. And the interesting part it will be changed before component will be initialized.

    Let's say we have such components with two lifecycle hooks and one property coming from input.

    @Component({
      selector: 'cmp',
    })
    export class Login implements OnChanges, OnInit {
      @Input() property: string = 'default';
    
      ngOnChanges(changes) {
        console.log('Changed', changes.property.currentValue, changes.property.previousValue);
      }
    
      ngOnInit() {
        console.log('Init', this.property);
      }
    
    }
    

    Situation 1

    Component included in html without defined property value

    As result we will see in console: Init default

    That's mean onChange was not triggered. Init was triggered and property value is default as expected.

    Situation 2

    Component included in html with setted property <cmp [property]="'new value'"></cmp>

    As result we will see in console:

    Changed new value Object {}

    Init new value

    And this one is interesting. Firstly was triggered onChange hook, which setted property to new value, and previous value was empty object! And only after that onInit hook was triggered with new value of property.

    0 讨论(0)
提交回复
热议问题