[解決済み] Angularの@Directives(@Components)にTypeScriptで複数のパラメータを渡すには?
質問
私は
@Directive
として
SelectableDirective
を渡す方法について、私は少し混乱しています。
を渡す方法についてです。
の値をカスタムディレクティブに渡す方法についてです。私はたくさん探しましたが、適切な解決策は得られませんでした。
Angular
で
タイプスクリプト
.
私のサンプルコードはこんな感じです。
親コンポーネントを
MCQComponent
:
import { Component, OnInit } from '@angular/core';
import { Question } from '../question/question';
import { AppService } from '../app.service/app.service';
import { SelectableDirective } from '../selectable.directive/selectable.directive';
import { ResultComponent } from '../result-component/result.component';
@Component({
selector: 'mcq-component',
template: "
.....
<div *ngIf = 'isQuestionView'>
<ul>
<li *ngFor = 'let opt of currentQuestion.options'
[selectable] = 'opt'
(selectedOption) = 'onOptionSelection($event)'>
{{opt.option}}
</li>
</ul>
.....
</div>
"
providers: [AppService],
directives: [SelectableDirective, ResultComponent]
})
export class MCQComponent implements OnInit{
private currentIndex:any = 0;
private currentQuestion:Question = new Question();
private questionList:Array<Question> = [];
....
constructor(private appService: AppService){}
....
}
これはカスタムディレクティブを持つ親コンポーネントです。 [選択可能] という一つのパラメータを取る opt .
以下は、このディレクティブのコードです。
import { Directive, HostListener, ElementRef, Input, Output, EventEmitter } from '@angular/core'
import { Question } from '../question/question';
@Directive({
selector: '[selectable]'
})
export class SelectableDirective{
private el: HTMLElement;
@Input('selectable') option:any;
...
}
ここで、私は 親からさらにパラメータを コンポーネントに渡したいのですが、どうすればよいでしょうか?
どのように解決するには?
からの ドキュメンテーション
<ブロッククオートコンポーネントと同様に、ディレクティブのプロパティは、テンプレート内で文字列を追加することにより、必要な数だけ追加することができます。 を追加することができます。
入力プロパティを
HighlightDirective
という
defaultColor
:
@Input() defaultColor: string;
マークアップ
<ブロッククオート<p [myHighlight]="color" defaultColor="violet">
Highlight me too!
</p>
アンギュラー
は
defaultColor
バインディングに属しています。
HighlightDirective
で公開したため
@Input
デコレータで公開されているからです。
いずれにせよ
@Input
デコレータは、このプロパティが public であり、親コンポーネントからバインド可能であることを Angular に伝えます。
公開され、親コンポーネントからのバインディングが可能であることを伝えます。また
@Input
がなければ、Angular はそのプロパティへのバインドを拒否します。
あなたの例では
多くのパラメータを持つ
プロパティを
Directive
クラスに
@Input()
デコレーター
@Directive({
selector: '[selectable]'
})
export class SelectableDirective{
private el: HTMLElement;
@Input('selectable') option:any;
@Input('first') f;
@Input('second') s;
...
}
そして、テンプレートの中で、バインドされたプロパティを
li
要素に渡します。
<li *ngFor = 'let opt of currentQuestion.options'
[selectable] = 'opt'
[first]='YourParameterHere'
[second]='YourParameterHere'
(selectedOption) = 'onOptionSelection($event)'>
{{opt.option}}
</li>
ここで
li
要素に、ディレクティブ名
selectable
. このディレクティブの中で
selectable
には二つの
@Input()
's,
f
という名前で
first
と
s
という名前で
second
. この2つを
li
という名前のプロパティに適用しています。
[first]
と
[second]
. そして、ディレクティブはこれらのプロパティを
li
要素に設定されているこれらのプロパティを見つけます。
@Input()
デコレータで設定されます。ですから
selectable
,
[first]
と
[second]
のすべてのディレクティブにバインドされます。
li
にある、これらの名前のプロパティを持つすべてのディレクティブに束縛されます。
シングルパラメータで
@Directive({
selector: '[selectable]'
})
export class SelectableDirective{
private el: HTMLElement;
@Input('selectable') option:any;
@Input('params') params;
...
}
マークアップ
<li *ngFor = 'let opt of currentQuestion.options'
[selectable] = 'opt'
[params]='{firstParam: 1, seconParam: 2, thirdParam: 3}'
(selectedOption) = 'onOptionSelection($event)'>
{{opt.option}}
</li>
関連
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] jQueryでページを更新するにはどうすればよいですか?
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] Angular:*ngClassを使った条件付きクラス
-
[解決済み] setTimeout()コールバックにパラメータを渡すにはどうすればよいですか?
-
[解決済み] Angularのルーティングされたコンポーネントにデータを渡すにはどうしたらいいですか?
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] これは純関数ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] なぜ "use strict "はパフォーマンスを10倍向上させるのか?
-
[解決済み] JavaScriptで、ある文字列が別の文字列の中に出現するすべてのインデックスを見つけるにはどうすればよいですか?
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] イテレータでmap()を使用する
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行
-
[解決済み] これは純関数ですか?