我有一个函数可以对从服务调用填充的变量执行某些操作。我的代码是这样的。
ngOnInit() {
this.itemservice.getItems().subscribe(data => { this.items = data}
var d = myfunction(this.items);
}
这是我在服务中的方法。
getItems() : Observable<Item[]> {
let headers = new HttpHeaders().set('Authorization','Bearer ' + token );
return this.http.get(this.url + '/items',{headers: headers}).map(res => <Item[]> res['result']);
}
我的项目在模板中显示没有任何问题,但是在调用函数时我没有定义this.items
。
答案 0 :(得分:1)
首先,您的ngOnInit
存在问题,您错过了)
,而您应该使用let
,而不是var
因为var
会提升let
该变量位于类的顶部,this.items
将阻止该变量的范围。
其次,Angular是异步的,你应该在subscribe
getItems()
事件的myfunction(thisitems)
内调用你想要使用的函数subscribe()
。您目前拥有它的方式,ngOnInit() {
this.itemservice.getItems().subscribe(data => {
this.items = data;
let d = myfunction(this.items);
});
}
在getItems() : Observable<Item[]> {
let headers = new HttpHeaders().set('Authorization','Bearer ' + token );
return this.http.get(this.url + '/items',{headers: headers}).map(res => res.json());
}
事件之前触发。请参阅下文。
getItems() : Observable<Item[]> {
let headers = new HttpHeaders().set('Authorization','Bearer ' + token );
return this.http.get<item[]>(this.url + '/items',{headers: headers});
}
您的服务应将响应映射到json,请参阅以下内容:
extern "C"
另请注意,Angular 4+使用HttpClient而不是常规Http。您的代码将更改为服务中的以下内容
rowwise()
答案 1 :(得分:-1)
由于角度是asyc语言和您的服务
(this.itemservice.getItems().subscribe(data => { this.items = data})
正在同时执行
this(var d = myfunction(this.items);)
调用函数,因此在服务调用
下添加此行var d = myfunction(this.items);
没有收到错误