Nie jestem pewien, czy jest to istotne, czy też pomaga komuś: Znalazłem podobny problem: chciałem spożyć własność typu Observable<number>
dostarczoną przez komponent w składniku macierzystym.
Po przeczytaniu Observables and Reactive Programming in Angular 2, zauważyłem, że trzeba „włączyć” wokół mojego architektury i niech rodzic stworzyć Observable
a następnie przypisać ją do dziecka.
Więc Zamiast MyComponent
z krytym @Output()
typu Observable<number>
(która następnie została zainicjowana do new BehaviorSubject(0)
i modyfikować za pomocą połączeń do next
), zmieniłem MyComponent
do Haven @Input()
typu BehaviorSubject<number>
:
@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 rodzic tworzy teraz obiekt BehaviorSubject i wiąże się z tą właściwością. Można go łatwo spożywać BehaviorSubject jako Obserwowalne:
@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: https://plnkr.co/edit/rKtVWmmGnFn4Po4B4CCL?p=preview
Więc w twoim przypadku, to powiedziałbym, że suwak powinna stanowić @Input
(może nazwać to wartość lub liczba) i niech rodzic przypisać obserwowalne (zamiast pozwolić dziecku stworzyć).
Możesz zrobić '(change) =" myOutput.emit ($ event) "'. Zakładając, że zrozumiałem cię poprawnie. –
To by zaoszczędzić mi na płycie głównej callback (great). Nadal musiałbym kopiować z jednego przedmiotu na drugi. –
Możesz umieścić swojego EventEmitter w usłudze, wywołać komponent API/metoda w usłudze wyzwalającej/'emit()' zdarzenie, a wszyscy subskrybenci zostaną powiadomieni. Więc nie ma kopiowania. Oto [przykład] (http://stackoverflow.com/questions/34376854/delegation-eventemitter-in-angular2/34402436#34402436). –