1. ホーム
  2. typescript

[解決済み] Angular2 - プライベート変数は、テンプレートでアクセス可能であるべきですか?

2022-04-26 02:59:44

質問

変数が宣言されている場合 private コンポーネントクラスで、そのコンポーネントのテンプレートにアクセスできるようにする必要がありますか?

@Component({
  selector: 'my-app',
  template: `
    <div>
      <h2>{{title}}</h2>
      <h2>Hello {{userName}}</h2> // I am getting this name
    </div>
  `,
})
export class App {
  public title = 'Angular 2';
  private userName = "Test Name"; //declared as private
}

解決方法は?

いいえ、テンプレートでプライベート変数を使用するべきではありません。

が好きなのですが drawmooreの回答 概念的には完璧なロジックだと思いますが、実装的には間違っています。テンプレートはコンポーネントクラスの中に存在するのではなく、その外側に存在するのです。以下を見てください。 このレポ をご覧ください。

なぜ動くかというと、TypeScriptの private キーワードは、実際にはメンバーをプライベートにはしません。ジャストインタイムのコンパイルは実行時にブラウザで行われ、JSにはプライベートメンバーという概念がない(まだ?) 謝辞は サンダー・イライアス 正しい道に導いてくれた

ngc とAhead-of-Timeコンパイルで、テンプレートからコンポーネントのプライベートメンバーにアクセスしようとすると、エラーが発生します。デモ用レポをクローンして MyComponent を実行すると、コンパイルエラーが発生します。 ngc . 以下もその例です。 回答 Ahead-of-Timeコンパイルに特有のものです。