角度控制器在工厂完成前正在执行 [英] angular controller is executing before factory complete

查看:17
本文介绍了角度控制器在工厂完成前正在执行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已将一些常用代码移至工厂.但是控制器在工厂加载之前正在执行.在这种情况下,我得到了空白响应(零结果)

I have moved some common code to factory. but the controller is executing before factory get loaded. In this case i am getting the blank response(zero results)

任何人都可以提出最佳解决方案.

can anyone suggest the best solution.

这是我的角度工厂,

app.factory('TabsFactory', function($resource){
    var activetabs = {};            
    activetabs.getDepositAccountDetails = function() {
        return $resource('xxxx/:number', {}, {
            getDepositAccountDetailsService: {
                method: 'GET',
                isArray: false
            }
        });
    }
    activetabs.getAccountInfo = function(){
        return accountinit.accountInfo;
    }
    activetabs.setAccountInfo = function(accountnumber, result) {
         var accountinit = {
                accountInfo: []
            }
        if (result.code == "v") {           
            activetabs.getDepositAccountDetails().getDepositAccountDetailsService({
                number: accountnumber
            }).$promise.then(function(response) {
               accountinit.accountInfo = response; 
              //here i am getting the JSON response
            }, function(error) {

            });
        }
        return accountinit;
    }
    return activetabs;
  });

控制器,

TabsFactory.setAccountInfo(accountnumber, $scope.accountInfo);    
$scope.accountInfo = TabsFactory.getAccountInfo();
alert(JSON.stringify($scope.accountInfo));

推荐答案

你应该使用 chain promise 来更新范围变量,因为你的 accountInfo 变量是在 $resource 内更新的承诺.

You should use chain promise to update scope variable, because your accountInfo variable is updated inside $resource promise.

代码

TabsFactory.setAccountInfo(accountnumber, $scope.accountInfo).then(function(data){
  $scope.accountInfo = TabsFactory.getAccountInfo();
  alert(JSON.stringify($scope.accountInfo));
});

更新

服务方法应该返回promise以继续promise链

Service method should return promise inorder to continue promise chain

activetabs.setAccountInfo = function(accountnumber, result) {
     var accountinit = {
            accountInfo: []
        }
    if (result.code == "v") {
        //added return below      
        return activetabs.getDepositAccountDetails().getDepositAccountDetailsService({
            number: accountnumber
        }).$promise.then(function(response) {
           accountinit.accountInfo = response; 
           return accountinit.accountInfo;
          //here i am getting the JSON response
        }, function(error) {

        });
    }
    return accountinit;
}

这篇关于角度控制器在工厂完成前正在执行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆