簡體   English   中英

AngularJs從工廠獲得員工

[英]AngularJs get employee from factory

我有一個employeeControlleremployeeFactoryemployeeFactory我收到一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM