İlgili olup olmadığından emin değilseniz veya birisine yardımcı olursa: Benzer bir sorunla karşılaştım: Ana bileşendeki bir bileşen tarafından sağlanan Observable<number>
türünde bir özellik kullanmak istedim.
Observables and Reactive Programming in Angular 2'u okuduktan sonra, mimarimin etrafında "dönmem" gerektiğini ve üst öğenin Observable
oluşturup sonra çocuğa atamasını sağladığımı fark ettim.
Bunun yerine, bir sığınak için MyComponent
değiştirildi tip Observable<number>
bir @Output()
bir MyComponent
olan (o new BehaviorSubject(0)
başlatıldı ve modifiye next
çağrı kullanılarak) tipi BehaviorSubject<number>
bir @Input()
:
@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);
}
}
The Ebeveyn artık bir BehaviorSubject oluşturur ve mülke bağlanır. senin durumunda Yani
https://plnkr.co/edit/rKtVWmmGnFn4Po4B4CCL?p=preview, senin kaydırıcı bir @Input
(belki değer veya numara diyoruz) sağlamalıdır söyleyebilirim ve let:
@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: Kolayca bir gözlemlenebilir olarak BehaviorSubject tüketebilir Ebeveyn gözlenebilir bir atamak (çocuğun bir tane oluşturmasına izin vermek yerine).
'(change) =" myOutput.emit ($ event) "işlevini kullanabilirsiniz. Seni doğru anladığımı varsayarsak. –
Bu, beni geri aramadaki (büyük) kazanın kurtarır. Bir konudan diğerine kopyalamak zorunda kalırdım. –
EventEmitter'ınızı bir Servis'e koyabilirsiniz, etkinliğinizin/emit() işlevini tetiklemek için hizmetinizde bir API/yöntem çağrısında bulunabilirsiniz ve tüm aboneler bilgilendirilir. Yani kopyalama yok. İşte [bir örnek] (http://stackoverflow.com/questions/34376854/delegation-eventemitter-in-angular2/34402436#34402436). –