[解決済み] Angularの@Directiveと@Componentの比較
2022-03-20 04:57:10
質問
とはどのような違いがあるのでしょうか?
@Component
と
@Directive
をAngularで使うことはできますか?
どちらも同じタスクで、同じ属性を持っているように見えます。
どのようなケースで、どのような場合に、どちらを選ぶべきでしょうか?
どのように解決するのですか?
Component はビューを必要としますが、@Directive は必要ありません。
ディレクティブ
<ストライク
私は@DirectiveをAngular 1.0のディレクティブになぞらえて、オプションとして
restrict: 'A'
(ディレクティブは属性の使用に限定されません。) ディレクティブは、既存のDOM要素または既存のコンポーネントインスタンスに動作を追加します。ディレクティブの使用例としては、要素のクリックを記録することが挙げられます。
import {Directive} from '@angular/core';
@Directive({
selector: "[logOnClick]",
hostListeners: {
'click': 'onClick()',
},
})
class LogOnClick {
constructor() {}
onClick() { console.log('Element clicked!'); }
}
というように使うことになる。
<button logOnClick>I log when clicked!</button>
コンポーネント
コンポーネントは、動作を追加したり変更したりするのではなく、実際には、付属の動作を持つ独自のビュー(DOM要素の階層)を作成します。この使用例としては、連絡先カードのコンポーネントがあります。
import {Component, View} from '@angular/core';
@Component({
selector: 'contact-card',
template: `
<div>
<h1>{{name}}</h1>
<p>{{city}}</p>
</div>
`
})
class ContactCard {
@Input() name: string
@Input() city: string
constructor() {}
}
というように使うことになる。
<contact-card [name]="'foo'" [city]="'bar'"></contact-card>
ContactCard
は再利用可能なUIコンポーネントで、アプリケーションのどこでも、他のコンポーネントの中でも使用することができます。これらは基本的に、アプリケーションのUIビルディングブロックを構成しています。
まとめ
UIのDOM要素の再利用可能なセットをカスタム動作で作成したい場合は、コンポーネントを記述します。既存の DOM 要素を補完する再利用可能な振る舞いを書きたい場合は、ディレクティブを書きます。
ソースはこちら
関連
-
[解決済み】アンギュラーコンポーネントにサービスを注入しようとするとエラー "EXCEPTION: Can't resolve all parameters for component"、なぜ?
-
[解決済み] エラーです。複数のモジュールがマッチしました。skip-import オプションを使用して、最も近いモジュールへのコンポーネントのインポートをスキップしてください。
-
[解決済み] ngModel' は 'input' の既知のプロパティではないため、バインドできません。
-
[解決済み] BehaviorSubjectとObservableの違い?
-
[解決済み] Angular/RxJS `Subscription` からいつ退会すればいいのか?
-
[解決済み] (変更) vs (ngModelChange) in angular
-
[解決済み] Angularでは、アクティブなルートをどのように決定するのですか?
-
[解決済み] Angularのルーティングされたコンポーネントにデータを渡すにはどうしたらいいですか?
-
[解決済み】PromiseとObservablesの違いは何ですか?
-
[解決済み】'formControl'は'input'の既知のプロパティではないのでバインドできない - Angular2 Material Autocomplete問題
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] コンストラクタとngOnInitの違いについて
-
[解決済み] NGIf else "の使い方を教えてください。
-
[解決済み] ngIf」は「div」の既知のプロパティではないため、バインドできない [重複] 。
-
[解決済み] 例外が発生しました。既知のネイティブプロパティではないため、'ngFor'にバインドできない
-
[解決済み】コンポーネントのプロパティが現在の日付時間に依存している場合、Angular2の「expression has changed after it was checked」例外を管理する方法
-
[解決済み] 設定ファイルにng serveのデフォルトのホストとポートを設定する。
-
[解決済み] Angular 6 素材マットセレクトの変更方法が削除されました。
-
[解決済み] テンプレート内の *ngIf else if
-
[解決済み] ファイル 'app/hero.ts' is not a module error in console, where to store interfaces files in directory structure with angular2?
-
[解決済み] Angularでオブジェクトを繰り返し処理する【重複】。