[解決済み] 「Angularコンポーネントのprivateとpublicについて
質問
もし
プライベート
の前に
foo
,
loadBar
そして
text
である。
パブリック
になっていると思います。
export class RandomComponent {
@Input() foo: string;
@Output() loadBar = new EventEmitter();
text: string;
}
である場合のユースケースはあるのでしょうか?
public
である場合の使用例はありますか?
カプセル化/セキュリティの理由から、常に
private
を付けるべきでしょうか?
export class RandomComponent {
@Input() private foo: string;
@Output() private loadBar = new EventEmitter();
private text: string;
}
ありがとうございます。
どのように解決するのですか?
この質問に対して言うべきことはたくさんありますが、これらは私の心に最初に浮かんだ考えです。
何よりもまず、次のことを心に留めておいてください。
private
はあくまでコンパイル時の構成要素であり、実行時に強制することはできません (
ここで
と
はこちら
をご参照ください。) そのため、以下のような概念は捨ててください。
private
がセキュリティのために役に立つという考えは捨ててください。それは単に、それがどうのこうのということではありません。
それは
は
のことで、コンポーネントのフィールドやメソッドをカプセル化し、他のどこからでもアクセスできないようにしたい場合は、絶対にそれを
private
: それは
private
はそのためのものです。
これはあなたの意図を示すものです。
クラス外から触られないようにするためのものです。
同じことが
public
: これもコンパイル時のみの構成なので、クラスメンバが
public
であるという事実は、実行時には全く意味を持ちません。しかし、クラスの API の一部として外部に公開することを明示的に意図しているメンバがある場合、そのメンバは絶対に
public
にして、その意図を伝える必要があります。これは
public
はそのためのものです。
これはすべて、一般的なTypescriptに当てはまります。Angular では特に、コンポーネントクラスに public メンバを持つことの有効なユースケースがあることは確かです。例えば コンテナ/コンポーネント (別名 スマート/ダム ) パターンでは、quot;dumb" の子供がコンストラクタ インジェクションによって "smart" の親に注入するため、親上のどのメンバーが子供に触るべきで、触らせないかという意図を伝えることが非常に重要です。 そうでなければ、親の酒棚でふざけている馬鹿な子供を捕まえても驚かないでしょう。
では、質問に対する私の答えです。
は、以下のように常に全てにprivateを付けるべきでしょうか?
は強調された
ではありません。
. あなたは
常に
加える
private
というのも、そうすることでキーワードの目的が達成されないからです。どこにも配置しないほうがよいでしょう。
関連
-
[解決済み】アンギュラーコンポーネントにサービスを注入しようとするとエラー "EXCEPTION: Can't resolve all parameters for component"、なぜ?
-
[解決済み] TypeScriptのハッシュマップ/辞書インターフェイス
-
[解決済み] コンストラクタとngOnInitの違いについて
-
[解決済み] Angular HTMLバインディング
-
[解決済み] Angular:*ngClassを使った条件付きクラス
-
[解決済み] モジュール "@angular-devkit/build-angular" が見つかりませんでした。
-
[解決済み] コンポーネントテンプレートで要素を選択するには?
-
[解決済み] Angularの@Directiveと@Componentの比較
-
[解決済み】PromiseとObservablesの違いは何ですか?
-
[解決済み】タイプライター。TS7006: パラメータ 'xxx' は暗黙のうちに 'any' 型を持つ。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 重複した識別子」という紛らわしいTypescriptエラーメッセージが発生する。
-
[解決済み] eslintをtypescriptで使用する - モジュールへのパスを解決できない
-
[解決済み] as "というキーワードは何を意味するのでしょうか?
-
[解決済み] TypeScriptのハッシュマップ/辞書インターフェイス
-
[解決済み] TypeScriptのsetTimeoutはどのような戻り値型を使用すればよいですか?
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] TypeScriptの "*.d.ts "について
-
[解決済み] async/await構文で拒否する方法は?
-
[解決済み】タイプライター。TS7006: パラメータ 'xxx' は暗黙のうちに 'any' 型を持つ。
-
[解決済み] Angular2 - プライベート変数は、テンプレートでアクセス可能であるべきですか?