Ich habe Daten für meine <select>
asynchron geladen. Ich benutze heiß beobachtbar, da sich die Daten im Laufe der Zeit ändern können. Das Problem ist, dass ich den ausgewählten Wert nicht setzen kann und auch Angular nicht auf das erste Element selbst zeigt (es gibt keinen Wert, bis der Benutzer es tut). Ich versuche mein eigenes Observable zu abonnieren und ... es funktioniert nicht, ich frage mich warum? Wie kann ich dieses Problem lösen?Angular: Setzen Sie den ausgewählten Wert für <select>
PLNKR: https://plnkr.co/edit/uDmTSHq4naYGUjjhEe5Q
@Component({
selector: 'my-app',
template: `
<div>
<h2>Hello {{name}}</h2>
</div>
<select [(ngModel)]="selectedValue">
<option *ngFor="let value of (values$ | async)"
[value]="value">{{ value }}
</option>
</select>
`,
})
export class App implements OnInit, OnDestroy {
public name: string;
public selectedValue: string = '';
public values$: Observable<Array<string>> = new Observable(observer => this.observer = observer);
protected observer: Subscriber<Array<string>>;
protected subscription: Subscription;
constructor() {
this.name = `Angular! v${VERSION.full}`
}
ngOnInit() {
this.subscription = this.values$.subscribe((values) => {
console.log('never fired...');
this.selectedValue = values[0];
});
setTimeout(() => {
this.observer.next(['some', 'test', 'data']);
});
}
ngOnDestroy() {
if (this.subscription) {
this.subscription.unsubscribe();
}
}
}
Dies ist die genaue Antwort +1, danke für das Teilen von Tipps Angular Star * –
Perfekt! Danke, könntest du auch mehr erklären, wie die "asynchrone" Pipe den Beobachter überschreibt? Ich habe gedacht, dass es bis jetzt sicher ist, mehrere Abonnements zu haben. –