Триггер valueChange с Инициализированным значением - angular2
Я пишу приложение angular2, и я застрял с чем-то. Прежде всего, у меня есть выбор, который привязан кformControl
:
export class MyComponent implements OnInit {
profilesBy: Observable<any[]>;
myControl = new FormControl();
constructor(public http: Http) {
this.profilesBy = this.myControl.valueChanges
.map(text => new formatQuery(text.value))
.switchMap(body => this.getGroupBy(body, this.url), (_, res)=> res.json().aggregations.group_by_type.buckets);
}
}
так,myControl
этоformControl
, а такжеprofilesBy
является наблюдаемой массива.formatQuery
просто отформатируйте тело для запроса, используя значение выбора иgetGroupBy
вернутьhttp
запрос (т.е. http.post (url, body) ...).
Затем я назначаю ответ:res.json().aggregations.group_by_type.buckets
Но не думай об этом слишком много.
Вот мой шаблон:
<md-card>
<h4>Profiles group by :
<select [formControl]="myControl">
Some options ...
</select>
</h4>
<div *ngFor="let profile of profilesBy | async">
<strong>{{profile.key}} :</strong> {{profile.doc_count | number:'1.0-2'}}
</div>
</md-card>
И он прекрасно работает, когда пользователь выбирает значение, он запускает valueChange и цепочку действий!
Так что я доволен этим. Я думаю, что это элегантный способ сделать вместоngOnChanges()
Теперь я не могу найти способ заставить это работать. По сути, я хочу инициализировать select значением и вызвать (без каких-либо действий пользователя)valueChange
Я пытался использовать [(ngModel)]:<select [formControl]="myControl" [(ngModel)]="selectedGroupBy">
но это не вызвало это.
Наконец, я попытался сделать вызов сам в методеngOnInit()
this.getGroupBy(new formatQuery(this.selectedGroupBy.value), this.url)
.subscribe((response) => {
this.profilesBy = response.json().aggregations.group_by_type.buckets;
});
Но я получилArray
вместоObservable of Array
! Что мне не хватает? Как я могу заставить это работать?
Спасибо за чтение этой темы, извините за плохой английский тоже!
Возможные решения: 1) использованиеstartWith
this.profilesBy = this.myControl.valueChanges
.startWith(DEFAULT)
.map(text => new formatQuery(text.value))
.switchMap(body => this.getGroupBy(body, this.url), (_, res)=> res.json().aggregations.group_by_type.buckets);