在下面的示例中,如何将myVar设置为从异步服务方法返回的值
angular.extend(this, {
myVar: (function() {
getVal();
})()
});
function getVal() {
var d = $q.defer();
MyFactory.Get()
.then(function (resp) {
d.resolve(resp.data);
});
return d.promise; // myVar should equal resp.data
};
我认为我表现出对承诺/推迟缺乏了解,所以建议会很棒。
答案 0 :(得分:1)
由于myVar是一个变量,你可以从控制器的任何地方设置它。在初始化中,您可以将其分配给回退值或将其设置为undefined。并在异步调用成功后设置它。
angular.extend(vm, {
myVar: 'fallback'
});
或:
angular.extend(vm, {
});
然后: 在控制器中:
getVar();
function getVar() {
getVal().then(function(data){
vm.myVar = data;
});
}
function getVal() {
var d = $q.defer();
MyFactory.Get()
.then(function (resp) {
d.resolve(resp.data);
});
return d.promise; // myVar should equal resp.data
};
或更有效率:
getVal();
function getVal() {
MyFactory.Get()
.then(function (resp) {
vm.myVar = resp.data;
});
};
将this
更改为vm
,以消除与this
关键字可能会发生冲突的错误。