AngularJS承诺不会正确设置“this”
我试图用JSON文件中的数据预填充一个选择列表 控制器 当我与检查器一起查看控制台时,会显示数据。但是,下面的代码生成一个空JSON,{} HTML 如果我将控制器第1行中的this.langs=[]设置为this.langs=[one],则模板会正确反映更改,如[langs:[one]] 编辑AngularJS承诺不会正确设置“this”,angularjs,json,Angularjs,Json,我试图用JSON文件中的数据预填充一个选择列表 控制器 当我与检查器一起查看控制台时,会显示数据。但是,下面的代码生成一个空JSON,{} HTML 如果我将控制器第1行中的this.langs=[]设置为this.langs=[one],则模板会正确反映更改,如[langs:[one]] 编辑 这个问题类似于,但是这个问题以简洁的方式解决了在AngularJS上下文中使用This的一个常见陷阱。您应该将This的外部存储在一个变量中,比如var=This,而resolve handler的内部
这个问题类似于,但是这个问题以简洁的方式解决了在AngularJS上下文中使用This的一个常见陷阱。您应该将This的外部存储在一个变量中,比如var=This,而resolve handler的内部使用This.langs=payload.data
希望有帮助 好吧,我想你的问题是函数中的这个与函数外的不一样。您可以将外部变量设置为一个变量,这样您就可以使用该变量来访问您的langs,即使在回调函数中也是如此
this.langs = [];
var base = this;
var promise = $lcidFactory.getLCIDS();
promise.then(
function(payload){
base.langs = payload.data;
console.log(payload.data);
},
function(error){
alert("[Error] "+error);
}
);
promise.then(
function(payload){
this.langs = payload.data;
}.bind(this),
...
我建议,javascript中的this有点奇怪,或者与其他语言和范围相关的东西有所不同
对于您的代码:
this.langs = [];
var promise = $lcidFactory.getLCIDS();
promise.then(
function(payload){
this.langs = payload.data;
console.log(payload.data);
}.bind(this),
function(error){
alert("[Error] "+error);
}
);
另一种解决方案是将上下文绑定到提供有界函数的函数
this.langs = [];
var base = this;
var promise = $lcidFactory.getLCIDS();
promise.then(
function(payload){
base.langs = payload.data;
console.log(payload.data);
},
function(error){
alert("[Error] "+error);
}
);
promise.then(
function(payload){
this.langs = payload.data;
}.bind(this),
...
这是回调函数中处于松散模式的窗口或处于严格模式的未定义窗口。这可以通过以下方式解决:
使用ES5绑定可以代替传统浏览器
promise.then(
(payload) => {
this.langs = payload.data;
},
...
使用ES6箭头函数
将其分配给父函数范围中的另一个变量
可能是真棒的复制品,就是这样!愚蠢的错误!谢谢
promise.then(
(payload) => {
this.langs = payload.data;
},
...
var _this = this;
promise.then(
function(payload){
_this.langs = payload.data;
},
...