Angular HttpClient get,错误此对象

时间:2017-11-15 19:29:49

标签: javascript node.js angular typescript httpclient

在我的Angular App中,我对node.js服务器进行了简单的调用。 HttpClient“得到” 函数返回正确的答案。这个答案我想存储在我的组件“接口”的变量中。但是在get请求的“subscribe”函数中,我的“this”指针并不指向我的组件。相反,它告诉我它是“SafeSubscriber”类型。对我的成员“interfaces”的任何调用都会导致以下错误: TypeError:无法读取未定义的属性'interfaces'

export class SettingsComponent implements OnInit {

public interfaces : string[];

constructor(private http: HttpClient) {
    this.interfaces = [];
    this.interfaces.push("huhu");

}

ngOnInit() : void {

    this.http.get('http://localhost:3000/settings/interfaces').subscribe((data) => {
        // Read the result field from the JSON response.
        console.log(data);
        this.interfaces.push("xxx");
        Object.keys(data).forEach(function(k) {
            console.log(k);
            this.interfaces.push("xxx");
        });
    }),
    err => {
      console.log("error " + err);
    }; 
}

}

正如您所看到的,我还尝试手动将一些值输入到数组中,以确保服务器响应不会导致问题。 任何帮助表示赞赏。

我使用此代码作为蓝图来自: https://angular.io/guide/http

@Component(...)
export class MyComponent implements OnInit {

  results: string[];

  // Inject HttpClient into your component or service.
  constructor(private http: HttpClient) {}

  ngOnInit(): void {
    // Make the HTTP request:
    this.http.get('/api/items').subscribe(data => {
      // Read the result field from the JSON response.
      this.results = data['results'];
    });
  }
}

1 个答案:

答案 0 :(得分:0)

您在此声明中失去了对正确this的引用:

Object.keys(data).forEach(function(k) {..})

在功能块代码this内部引用调用上下文,这是订阅方法本身,这就是为什么interfaces未定义的原因,因为它不是subscribe方法的属性。

您可以更改lambda的功能,它应该没问题:

Object.keys(data).forEach((k) => {..})