Angular:变量未定义

时间:2018-01-19 12:05:10

标签: angular rest

我有一个函数可以对从服务调用填充的变量执行某些操作。我的代码是这样的。

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

2 个答案:

答案 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);

没有收到错误