我有一个工厂,我希望在函数中返回一个承诺,但我的控制器每次都会说:
(function () {
'use strict';
angular
.module('testApp')
.factory('personFactory', personFactory);
personFactory.$inject = ['storage'];
function personFactory(storage) {
storage.getData().then(function (response) {
return {
allData: function () {
return response
}
}
});
}
})();
我的工厂:
(function () {
'use strict';
angular
.module('testApp')
.controller('menuListController', menuListController);
menuListController.$inject = ['$scope', 'personFactory', '$rootScope'];
function menuListController($scope, personFactory) {
$scope.fromFactory = personFactory.allData();
console.log($scope.fromFactory)
}
})();
我的控制器:
mysql
我认为我必须双重返回这两个函数,但是如果这是问题,也无法在控制器中调用它。
答案 0 :(得分:2)
你的工厂定义必须返回一些东西,这就是问题所在:
function personFactory(storage) {
return storage.getData().then(function (response) {
return {
allData: function () {
return response
}
}
});
}
现在,我不知道这是不是你真正需要的。我通常在工厂中返回一个函数或对象,然后我使用它。
使用您的方法,您只需调用一次getData并直接在控制器中接收承诺。
我喜欢它,现在我想起来了:)
但是!看看你的其余代码,我认为你毕竟不会期望得到承诺。 无论如何你必须做这样的事情:
personFactory.then(function () {
$scope.fromFactory = data.allData();
});
这又让我觉得你不需要那样做allData业务。这就是我要做的事情:
function personFactory(storage) {
return storage.getData();
}
personFactory.then(function (response) {
$scope.fromFactory = response;
});
看起来如何?