関連性があるか、それが誰かを助けるかわからない場合:同様の問題が発生しました。親コンポーネントのコンポーネントによって提供されるタイプObservable<number>
のプロパティを消費したかったのです。
Observables and Reactive Programming in Angular 2を読んだ後、自分のアーキテクチャを "回し"親がObservable
を作成してそれを子に割り当てさせる必要があることに気付きました。
だから代わりに(その後、new BehaviorSubject(0)
に初期化next
への呼び出しを使用して変更した)タイプObservable<number>
の@Output()
とMyComponent
を有することが、私は避難所にタイプBehaviorSubject<number>
の@Input()
をMyComponent
を変更:
@Component({
selector: 'my-component',
template: `
<button (click)="increment()">Click me!</button>
`,
})
export class MyComponent {
private _count : number = 0;
@Input()
public counter : BehaviorSubject<number>;
public increment() {
this._count++;
if (this.counter)
this.counter.next(this._count);
}
}
parentはBehaviorSubjectを作成し、プロパティにバインドするようになりました。あなたのケースではそう
https://plnkr.co/edit/rKtVWmmGnFn4Po4B4CCL?p=preview、私はあなたのスライダが@Input
(多分それは値または数を呼び出す)を提供するべきであると言うとしましょう:
@Component({
selector: 'my-app',
template: `
<my-component [counter]="count"></my-component>
<span>{{text | async}}</span>
`,
})
export class App {
public text : Observable<string>;
public count : BehaviorSubject<number> = new BehaviorSubject(0);
constructor() {
this.text = this.count.map(n => "Click: " + n);
}
}
Plunkerを:それは容易に観察としてBehaviorSubjectを消費することができますparentはobservableを割り当てます(子に子を作成させるのではなく)。
あなたは '(change)=" myOutput.emit($ event) "'を実行できます。私はあなたを正しく理解したと仮定します。 –
それは私にコールバックの定型文を保存するでしょう(素晴らしい)。私はまだ1つの主題から次の主題にコピーしなければならないでしょう。 –
EventEmitterをサービス内に配置し、コンポーネントがサービス上でAPI /メソッドを呼び出して、イベントをトリガーする/ 'emit()'することができ、すべてのサブスクライバに通知されます。だからコピーはありません。ここに[例](http://stackoverflow.com/questions/34376854/delegation-eventemitter-in-angular2/34402436#34402436)があります。 –