2017-10-13 128 views
-1

如何在Angular 4中绑定private财产?在[(ngModel)]中绑定私有财产

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.

+0

为什么你的getter和setter方法有不同的名字?你应该只有'get insertDate'和'set insertDate',并给私人支持属性一个不同的名字('_insertDate',按照惯例)。这就是说,鉴于你的getter和setter不做任何事情,*为什么你有他们?* – jonrsharpe

+0

否则我会得到错误'重复标识符' – bielas

+1

我认为你应该阅读http://www.typescriptlang.org /docs/handbook/classes.html#accessors。 – jonrsharpe

回答

1

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

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

+0

那么封装呢? – bielas

+0

@bielas,没什么,你可以尽可能多地使用'private'变量,但是没有办法将它们绑定到模板 –

0

答案是将其改为:

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

再次,在这种情况下,**没有getter和setter **的意思。 – jonrsharpe

+0

这是为什么?你能告诉我吗? – bielas

+0

你为什么这么想?因为他们*没有做任何事情*。你已经添加了多行代码和相关的认知开销,*没有任何好处*。透明的方式来控制访问属性,如这些访问器和Python的属性,伟大的事情是,你可以*完全抛弃它们直到你真的需要它们去做某件事。 – jonrsharpe