私はAngular4を使用してWebアプリケーションを構築していますが、他のコンポーネントの関数を呼び出すためのボタンを作成しようとしています。角4は別のコンポーネントの関数を実行します
私はここに他の同様の質問を読んでいたが、彼らはコンポーネントは、HTMLの宣言で子または兄弟要素であるシナリオ、例えばを持って:
<parent-component>
<child-component></child-component>
<sibling-component></sibling-component>
</parent-component>
しかし、私は別のに取り組んでいます私のコンポーネントはrouting
で呼び出され、私はそれを動作させることができないからです。
基本的に私はの機能を実行するいくつかのコントロールを備えていますが、これらの機能はルーティング経由で読み込まれた他のコンポーネントのデータをトリガ/変更する必要があります。
例えば、私は店のリストを表示する/store
をルーティングしている、私も、私は、ユーザーがヘッダ上のボタンをクリックしたときに表示するこのページの引き出しを持っている、これは、問題となっていますHeaderComponent
からStoreComponent
にイベントを伝播できないためです。
header.component.ts
@Component({
selector: 'header',
templateUrl: `
<section class="container">
<button (click)="clickFilter()">Open filter</button>
</section>
`
})
export class HeaderComponent {
@Output() onFilter: EventEmitter = new EventEmitter();
clickFilter():void {
this.onFilter.emit('Register click');
}
}
store.component.ts
@Component({
templateUrl: 'store.html'
})
export class StoreComponent {
onFilterClick(event) {
console.log('Fire onFilterClick: ', event);
}
}
// store.html
<article class="card" (onFilter)="onFilterClick($event)">
Test
</article>
しかし、これは動作しません。
これらは私のファイルです。
また、私は実際に関数を呼び出す必要はありません。例えば、StoreComponentのプロパティにバインドして、HTMLファイル内のdivを切り替えるなど、ブール値を渡すことができます。
上で正常にfunctionOnStoreを宣言します。 http://stackoverflow.com/help/mcveが役立ちます。親子関係にないコンポーネントは、共通の親を介して通信することも、親のインジェクタ上のサービスを介して通信することもできます。親を通してのコミュニケーションが選択肢でない場合...数学を行う。 – estus
https://angular.io/guide/component-interactionサービスへのアプローチ –