我正在编写一个 angular2 应用程序,但我遇到了一些问题。首先,我有一个绑定到 a 的选择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
是一个数组的 Observable。只需使用 select 的值格式化查询的主体并
返回请求(即:http.post(url, body) ...)。
然后我分配响应:
但不要考虑太多。formatQuery
getGroupBy
http
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>
当用户选择一个值时它工作得很好,它触发valueChanges
并链接动作!
所以我很高兴。我认为这是一种优雅的方式,而不是使用ngOnChanges()
现在在这里我找不到使它起作用的方法。基本上,我想用一个值初始化选择并触发(没有任何用户操作)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
!我想念什么?我怎样才能让它工作?
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);