[英]Identifier refers to a private member in angular
我試圖在角度定義model
並使用html。 這是我的代碼:
'user.model.ts'
export class User{
private name: string;
constructor($name: string){
this.name = $name;
}
public get $name(): string {
return this.name;
}
public set $subject(value: string) {
this.name = value;
}
}
component.ts
myUsers: Array<User>;
ngOnInit(){
//api call
this.myUsers= resultFromAPi;
}
component.html
<div *ngFor="let user of myUsers">
{{user.name}}
</div>
現在,盡管在用戶界面中,我仍然可以看到該名稱,並且可以正常使用。 但是同時在我的代碼編輯器(VS代碼)中,我看到一個錯誤:
[Angular] Identifier 'name' refers to a private member of 'User'
我知道我可以通過將字段公開來解決錯誤,但是我認為那是不好的設計。
更新
{{user.$name}}
甚至不在用戶界面上顯示名稱
那么,在定義名為$name
的公共獲取方法時,為什么模板代碼包含{{user.name}}
?
{{user.name}}
應該
{{user.$name}}
或更改您的User
類成員名稱。 其他對我來說沒有意義的代碼是調用setter $subject
。 如果在您創建代碼后我繼承了您的代碼或必須在模板中執行某些操作,這會使我感到困惑。 為您的字段和訪問屬性使用直觀一致的名稱。
就我個人而言,我將只有一個公共字段name
或一個帶有公共getter name
的私有字段$name
name
。
似乎完全基於這種問題的趨勢,代碼中仍存在未顯示的問題,我建議您僅基於傳入的json
創建一個接口,然后從服務中返回該接口。
import { HttpClient } from '@angular/common/http';
export interface IUser {
name: string;
}
export class UserService {
constructor(private httpService: HttpClient) {}
getUsers(): Observable<IUser[]> {
return this.httpService.get<IUser[]>('your user end point here');
}
}
當我們使用AOT(提前)編譯器時,所有模板成員(例如屬性和方法)必須在公共位置定義。 如果要使用提前編譯,則無法訪問模板中的私有屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.