ko.observable
en yakın analog Subject
hatta BehaviorSubject
ve ko.computed
için size Burada Observable.combineLatest
kullanabilir tür merhaba dünya örneği:
import 'rxjs/add/operator/map';
import {Component} from '@angular/core';
import {Observable, BehaviorSubject} from "rxjs";
@Component({
selector: 'app-root',
template: `<div>
<button (click)="both()">both</button>
<button (click)="first()">first</button>
<button (click)="last()">last</button>
<button (click)="ageNow()">age</button>
<hr />
fullName: {{fullName | async}}
<hr />
age: {{age | async}}
</div>`
})
export class AppComponent {
firstName = new BehaviorSubject(''); // aka this.firstName = ko.observable('')
lastName = new BehaviorSubject('');
age = new BehaviorSubject(0);
fullName = Observable.combineLatest(this.firstName, this.lastName) // aka this.fullName = ko.computed(...)
.do(values => console.log('computed fired'))
.map(values => values.join(' ').trim());
both() {
this.first();
this.last();
}
first() {
this.firstName.next('foo ' + Date.now());
}
last() {
this.lastName.next('bar ' + Date.now());
}
ageNow() {
this.age.next(Date.now());
}
}
Ve Muhtemelen formlarla çalışmayı isteyeceksin, o zaman bu gibi bir şey olacak:
import 'rxjs/add/operator/map';
import {Component} from '@angular/core';
import {Observable, BehaviorSubject} from "rxjs";
import {FormGroup, FormControl, FormBuilder} from "@angular/forms";
@Component({
selector: 'app-root',
template: `<form [formGroup]="form">
<input formControlName="firstName" />
<input formControlName="lastName" />
{{fullName | async}}
</form>`
})
export class AppComponent {
form:FormGroup;
firstName = new FormControl('');
lastName = new FormControl('');
fullName = Observable.combineLatest(
this.firstName.valueChanges.startWith(''),
this.lastName.valueChanges.startWith('')
).map(values => values.join(' ').trim());
constructor(private fb:FormBuilder) {
this.form = fb.group({
firstName: this.firstName,
lastName: this.lastName
});
}
}
Örnek formda, FormControl için değil, valueChanges
akışındaki derlemeyi izlediğimizi de unutmayın, bunun için başlangıç değerini de tanımlarız.
Eğer | async
her zaman akışına abone olabilirsiniz şablonlardaki boru ve onları bileşen özellikleriyle
başa değil isterseniz Bu fonksiyonun içeriği yalnızca bilgisayar olmasını sağlamak vermediğinde girişin değişim biri. Alıcının işlevi bir tür hesaplama yoğun iş yapıyorsa (büyük bir nesne listesi gibi) bu durum verimsiz olmaya devam edecektir. - Bunu sağlanan plunkr'da görebilirsiniz. –