[英]AngularJs get employee from factory
我有一個employeeController
和employeeFactory
在employeeFactory
我收到一個employee
是這樣的:
function employeeFactory(authenticationFactory,requestFactory,GLOBALS) {
var factory = {};
var vm = this;
vm.employee = {};
factory.getEmployee = function(id) {
data = {"api_token": authenticationFactory.getToken()};
url = GLOBALS.url + 'show/employee/' + id;
requestFactory.post(url, data)
.then(function (response) {
return vm.employee = response.data.result.Employee;
}, function () {
$window.location.assign('/');
});
}
return factory;
}
在我的控制器中,我試圖像這樣接收它:
console.log(employeeFactory.getEmployee($routeParams.id));
但是結果是否為空?
當我console.log
在我的requestFactory
的響應時,我收到一個employee
對象。 我究竟做錯了什么?
其背后的原因是,您錯過了從factory.getEmployee
方法返回requestFactory.post
承諾factory.getEmployee
碼
factory.getEmployee = function(id) {
data = {"api_token": authenticationFactory.getToken()};
url = GLOBALS.url + 'show/employee/' + id;
return requestFactory.post(url, data)
.then(function (response) {
return vm.employee = response.data.result.Employee;
}, function () {
$window.location.assign('/');
});
}
但是,即使您這樣做,也將無法獲得價值employee
對象的打印。 它將通過$http.post
方法/ $resource
方法打印promise對象返回
為了控制該對象,您需要在該promise對象上使用.then
函數。 像下面
employeeFactory.getEmployee($routeParams.id).then(function(employee){
console.log('Employee', employee)
})
我們可以在angularjs中使用延遲的api,以在調用方和服務之間實現更好的通信。
factory.getEmployee = function(id) {
var deferred = $q.defer();
data = {"api_token": authenticationFactory.getToken()};
url = GLOBALS.url + 'show/employee/' + id;
return requestFactory.post(url, data)
.then(function (response) {
deferred.resolve(response.data.result.Employee);
}, function () {
deferred.reject();
});
return deferred.promise;
}
在您的控制器上:
employeeFactory.getEmployee($routeParams.id).then(function(employee){
console.log('Employee', employee)
},function(){
$window.location.assign('/');
})
通過這種方法,如果您的響應被延遲,我們可以通知呼叫者一些消息。 有關更多信息,請參見此鏈接。 有角度的承諾
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.