控制器没有正确地从工厂获取数据,以便在视图中显示(或者控制器的工厂语法不正确)。我最初拥有控制器中的所有数据并且工作正常但是当我将其传输到工厂时,数据将不再显示在视图上。所以要么控制器没有正确调用工厂数据,要么工厂没有正确定义,我不知道哪一个是错误的。
位指示:
app.controller('dbCtrl', ['$scope', 'myfactory', function($scope, myfactory) {
myfactory.success(function(data) {
$scope.test1 = results[0].data;
$scope.test2 = results[1].data;
$scope.test3 = results[2].data;
});
}]);
厂:
app.factory('myfactory', ['$http', function($http, $q) {
$q.all([
$http.get('/url1'),
$http.get('/url2'),
$http.get('/url3')
]).then(function(data) {
return data;
})
}]);
答案 0 :(得分:2)
用于创建和访问工厂的代码语法是错误的。你应该检查angular docs。
但是对于你的问题,我已经创建了匹配你的例子。 http://plnkr.co/edit/TJObJN?p=preview
myfactory.getResult().then(function(results) {
....
}
app.factory('myfactory', ['$http', '$q', function($http, $q) {
var _getResult = function() {
// returns promise which depends on all 3 http responses.
// parallel AJAX request.
return $q.all([
$http.get('/url1'),
$http.get('/url2'),
$http.get('/url3')
]);
};
// public functions available in controller
return {
getResult: _getResult
};
///////////////////
}]);
几点说明:
答案 1 :(得分:1)
app.factory('myfactory', ['$http', function($http, $q) {
return {
getAll: $q.all([
$http.get('/url1'),
$http.get('/url2'),
$http.get('/url3')
]).
then(function(data) {
return data;
});
};
}]);
然后在ctrl:
myfactory.getAll().then( ...