簡體   English   中英

標識符是指私有成員

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM