我有这个工厂:
(function () {
angular.module('appContacts')
.factory('dataService', ['$q', '$http', dataService]);
function dataService($q, $http) {
return {
getAllOrganizations: getAllOrganizations,
getAllContacts: getAllContacts,
};
function getAllContacts() {
return $http({
method: 'GET',
url: 'api/allcontacts'
})
}
function getAllOrganizations() {
return $http({
method: 'GET',
url: 'api/organizations'
})
}
}
})();
我有这个控制器:
(function () {
"use strict";
angular.module('appContacts')
.controller('contactsController', function contactsController($http, dataService) {
var vm = this;
vm.organizations = [];
vm.allcontacts = [];
vm.organizations = dataService.getAllOrganizations();
vm.allcontacts = dataService.getAllContacts();
});
})();
如果我在控制器中创建一个console.log console.log(dataService.getAllOrganizations())和console.log(dataService.getAllContacts())我看到我有一个 PROMISE 因此我得到一个错误 [filter:notarray]预期的数组但收到:{}:
我怎么能在一个真正的错误中转换这个承诺,我可以分配给变量,如:
vm.organizations = dataService.getAllOrganizations()
和
vm.allcontacts = dataService.getAllContacts(); ?
答案 0 :(得分:0)
您的服务以承诺回报。因此,您需要使用控制器中的然后语法解析承诺,以便从服务器获取数据。你需要这样的东西:
dataService.getAllOrganizations().then(function(result){
vm.organizations = result;
}, function(error){
console.log(error);
});
为了默认进行通话,您需要一个方法,我们称之为activate()。我不确定语法是否正确,我把它写在了我的头顶。
请查看John Papa的风格指南here。
(function () {
"use strict";
angular.module('appContacts')
.controller('contactsController', function contactsController($http, dataService) {
var vm = this;
vm.organizations = [];
vm.allcontacts = [];
var activate = function activate() {
dataService.getAllOrganizations().then(function(result){
vm.organizations = result;
}, function (error){});
dataService.getAllContacts().then(function(result){
vm.allcontacts = result;
}, function (error){});
}
activate();
});
})();