我在angular 1.5控制器中有一个方法,如下图所示,但是我想将ajax调用重构到工厂本身,但我遇到了承诺问题..我正试图找到我的角色控制器我可以像下面显示的那样调用方法。这可能吗?我试图避免成功(控制器代码中的函数(...)。
任何帮助都非常感激。
尝试转移到
vm.member = someFactory.getMember(vm.id);
现有工作控制器代码
vm.myMethod = myMethod;
...
function myMethod() {
someFactory.getMember(vm.id).success(function(response) {
vm.member = response;
});
}
当我将getMethod行移动到工厂时,响应会明显填充,但是一旦我回到控制器,即使工厂的返回值是响应,结果也是未定义的。我知道这是因为承诺,但有一种我缺少的设计模式或干净的方式。使用我当前的方法,我的控制器充斥着.success(function()...)
非常感谢!
答案 0 :(得分:0)
该程序称为承诺展开。
除了success
已被弃用且应替换为then
的事实,
someFactory.getMember(vm.id).then(function(response) {
var data = res.data;
...
});
在控制器中安装它是完全可以的。
此模式的替代方法是返回自填充对象(ngResource $resource
所做的事情):
function getMember(...) {
var data = {};
$http(...).then(function (response) {
// considering that response data is JSON object,
// it can replace existing data object
angular.copy(data, response.data);
});
return data;
}
在这种情况下,控制器可以立即获得对象的引用,对象属性{{ vm.member.someProperty }}
的绑定将在响应时更新。
模式仅限于对象(和数组),标量值应该用对象包装。