コンポーネントで使用されているディレクティブへの参照を取得する
2023-07-27 16:30:28
質問
以下のようなテンプレートを持つコンポーネントがあります。
<div [my-custom-directive]>Some content here</div>
にアクセスする必要があります。
MyCustomDirective
クラスのインスタンスにアクセスする必要があります。子コンポーネントへのアクセスを取得したい場合、私は
ViewChild
クエリを使用します。
子ディレクティブにアクセスするための同等の機能はありますか?
どのように解決するのですか?
この場合
exportAs
のプロパティに
@Directive
アノテーションのプロパティです。これは、親ビューで使用されるディレクティブをエクスポートします。親ビューから、それをビュー変数にバインドし、親クラスからそれにアクセスするために
@ViewChild()
.
例 プランカー :
@Directive({
selector:'[my-custom-directive]',
exportAs:'customdirective' //the name of the variable to access the directive
})
class MyCustomDirective{
logSomething(text){
console.log('from custom directive:', text);
}
}
@Component({
selector: 'my-app',
directives:[MyCustomDirective],
template: `
<h1>My First Angular 2 App</h1>
<div #cdire=customdirective my-custom-directive>Some content here</div>
`
})
export class AppComponent{
@ViewChild('cdire') element;
ngAfterViewInit(){
this.element.logSomething('text from AppComponent');
}
}
更新
コメントで言及されているように、上記の方法とは別の選択肢があります。
を使う代わりに
exportAs
を使う代わりに、直接
@ViewChild(MyCustomDirective)
または
@ViewChildren(MyCustomDirective)
以下は、3つのアプローチの違いを示すコードです。
@Component({
selector: 'my-app',
directives:[MyCustomDirective],
template: `
<h1>My First Angular 2 App</h1>
<div my-custom-directive>First</div>
<div #cdire=customdirective my-custom-directive>Second</div>
<div my-custom-directive>Third</div>
`
})
export class AppComponent{
@ViewChild('cdire') secondMyCustomDirective; // Second
@ViewChildren(MyCustomDirective) allMyCustomDirectives; //['First','Second','Third']
@ViewChild(MyCustomDirective) firstMyCustomDirective; // First
}
更新
関連
-
[解決済み] Angular 2の@ViewChildアノテーションがundefinedを返す
-
[解決済み] Angularの@Directiveと@Componentの比較
-
[解決済み] Angular 2: 反応するフォームコントロールの反復処理
-
[解決済み] Angular Materialでのデフォルトのソート - ヘッダーのソート
-
[解決済み] 角度2 ngfor 最初、最後、インデックスループ
-
[解決済み] FormGroupとFormArrayの使い分けは?
-
[解決済み] Angular 2で送信後にフォームをクリアするには?
-
[解決済み] Angular2のテーブル行をコンポーネント化
-
[解決済み] angularで1つの要素に複数のテンプレートバインディングを適用する方法 [重複].
-
[解決済み] APIレスポンスからレスポンスヘッダを読み取る - Angular 5 + TypeScript
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】@ViewChildと@ContentChildの違いは何ですか?
-
[解決済み] trackBy` と `ngFor` の使い方
-
[解決済み] FormGroupから単一の値を取得する方法
-
[解決済み] 子ルートから親ルートに移動するにはどうしたらいいですか?
-
[解決済み] の@ViewChildのreadパラメータは何ですか?
-
[解決済み] Uncaught Error: Unexpected module 'FormsModule' declared by the module 'AppModule'. Pipe/@Directive/@Component アノテーションを追加してください。
-
[解決済み] Angular Material 2 ネストされたオブジェクトによるデータテーブルのソート
-
[解決済み] Angularのビルドと実行方法
-
[解決済み] Tslint - type trivially inferred - なぜここに型を入れるのはバッドプラクティスなのですか?
-
[解決済み] Angular 2 コンポーネントコンストラクタとOnInitの比較 [重複]。