Angular 2. Http。订阅:"这个"指针

时间:2016-01-12 07:33:25

标签: angular typescript

得到了:

http.request('js/app/config/config.json').subscribe(data => {
            this.url = data.json().url;
        });

以某种方式"这"指向订阅者。不知道为什么......因为我认为胖箭lambda会抓住父级的指针。

为什么这样?

4 个答案:

答案 0 :(得分:7)

根据屏幕截图:http://d.pr/i/iBa

enter image description here

您正在控制台中调试this。请注意,控制台上的this将是实际。当TypeScript为非ES6 JavaScript(它没有箭头函数的原生支持)生成箭头函数时,this被映射到_this(和其他东西),这意味着您需要查看{ {1}}。

TIP

在学习TypeScript时调试生成的JavaScript。如果您感兴趣,这是TypeScript错误:https://github.com/Microsoft/TypeScript/issues/2859

答案 1 :(得分:3)

我找到了解决方法,你可以试试这个

http.request('js/app/config/config.json').subscribe((function (data) {
  this.url = data.json().url;
}).bind(this));

答案 2 :(得分:2)

箭头函数没有自己的this值。箭头函数中this的值始终从封闭范围继承,在您的情况下{{1 }}

在ES6版本中,请注意Subscriber方法从其来电者处收到subscribe。内部函数是一个箭头函数,因此它从封闭范围继承 this

答案 3 :(得分:1)

这是ES6箭头功能功能,以避免为上下文创建另一个变量。你不能覆盖箭头功能的“这个”。

http.request('js/app/config/config.json').subscribe(function(data) {
  this.url = data.json().url;
});

参考此文档: http://derickbailey.com/2015/09/28/do-es6-arrow-functions-really-solve-this-in-javascript/