在[(ngModel)]中绑定私有财产

时间:2017-10-13 16:20:33

标签: angular data-binding angular-ngmodel two-way-binding

如何在Angular 4中绑定private属性?

export class newItem{
  private id: number;
  private description: string;
  private insertDate: any;

  get getId() : number {
    return this.id;
  }
  set setId(name : number) {
    this.id = name;
  }
  get getDescription() : string {
    return this.description;
  }
  set setDescription(description : string) {
    this.description = description;
  }
  get getInsertDate() : string {
    return this.insertDate;
  }
  set setInsertDate(insertDate : string) {
    this.insertDate = insertDate;
  }

这里

  

它抛出Cannot assign to 'getInsertDate' because it is a constant or a read-only property.

3 个答案:

答案 0 :(得分:1)

答案是将其更改为:

private _id: number;
  get id() : number {
    return this.id;
  }
  set id(name : number) {
    this.id = name;
  }

答案 1 :(得分:0)

“如何在Angular 4中绑定私有属性?”

无法将private变量绑定到模板(在您的情况下使用[(ngModel)])。您应该使用public变量。

答案 2 :(得分:0)

直接绑定属性:

Demo in this Plunker

模板:

<input [(ngModel)]="testVar" #textBox type="text"> 
<p>This is the value of testVar : {{testVar}}</p>

组件:

 export class MyComponent {
     private testVar: string = "Test this";
 }
  1. 如果你想要双重绑定并使用getter和setter,那么你的get和set必须具有相同的名称(模板中使用的名称)

  2. 组件中
  3. 属性不需要公开,以允许与ngModel进行数据绑定。他们可以完全私密。

  4. 正如在其他答案中已经说过的那样,在你的情况你根本不需要吸气器和设置器!

  5. 最好避免不必要的代码,为了你自己的心灵理智!

    如果您担心封装,请不要:将您的模板视为组件的一部分。模板完全可以使用组件私有字段(除非你需要,否则不需要通过get / set访问器)