2015-10-29 39 views
0

我有一个可以说服务两种方法

var getAccountTypes = function() { 
    return $http.get(serviceBase + "accountTypes"); 
}; 
var getSalesReps = function() { 
    return salesRepResource.query(); 
}; 

正如你所看到的,getAccountTypes使用$ HTTP而getSalesReps使用$资源。

我使用的UI路由器,这里是我的状态:

.state("app.erp.accountVertical.createAccount", { 
    url: "/createAccount", 
    views: { 
     "": { 
      controller: "createAccountController as vm", 
      templateUrl: "app/erp/accountVertical/account/createAccount.html" 
     }, 
     "[email protected]": { 
      templateUrl: "app/erp/accountVertical/accountBasicInfoPanel.html" 

     }, 
     "[email protected]": { 
      templateUrl: "app/erp/accountVertical/account/accountBillToAddressPanel.html" 
     } 
    }, 
    resolve: { 
     commonService: "commonService", 
     dropDowns: function (commonService) { 
      return { 
       accountTypes: commonService.getAccountTypes(), 
       countries: commonService.getCountries(), 
       salesReps: commonService.getSalesReps(), 
       states: commonService.getStates() 
      }; 
     }, 
     loadMyFiles: function($ocLazyLoad) { 
      return $ocLazyLoad.load({ 
       files: [ 
        "app/erp/accountVertical/account/createAccountController.js" 
       ] 
      }); 
     } 
    } 
}) 

当我浏览到的观点,我的销售代表下拉被正确填充。但是,我的帐户类型下拉列表是空的。看起来承诺没有解决?以下是我在console.log中看到的内容。 enter image description here

这里是控制器:

(function() { 

    "use strict"; 

    angular 
     .module("app.accountVertical") 
     .controller("createAccountController", createAccountController); 

    createAccountController.$inject = [ 
     "$http", 
     "$state", 
     "$filter", 
     "appSettings", 
     "dropDowns" 
    ]; 

    function createAccountController($http, $state, $filter, appSettings, dropDowns) { 
     var vm = this; 

     vm.account = {}; 
     console.log(dropDowns.accountTypes); 
     vm.accountTypeOptions = dropDowns.accountTypes.data; 
     vm.salesRepOptions = dropDowns.salesReps; 
    } 
}()); 

如何获取数据了$ HTTP GET到控制器?谢谢。

回答

0

这是因为您不能从.get请求返回该信息,因为它是异步调用。

这意味着返回被调用一个null或空的返回和.get方法仍在等待自己完成。当我在服务中使用.get时,我遇到了同样的问题。

我只好只用不用彷徨在控制器的请求,然后使用.succes方法将repsonse数据分配给一个变量

$http.get(serviceBase + "accountTypes")) 
       .success(function(response){ 
        $scope.accTypes = response.data 
       }) 

repsonse.data是以往任何时候都这样,你访问你从想要的信息啥子从不用彷徨方法返回

编辑:

app.factory('myService', function($http) { 
    return { 
    getFooOldSchool: function(callback) { 
     $http.get('foo.json').success(callback); 
    } 
    } 
}); 
+0

我想有$ HTTP不依赖苗条控制器。在进入控制器之前,我应该可以使用ui-router来解决所需的一切。如何在控制器实例化之前强制$ http解析? – BBauer42

+0

从服务返回值时,您可以尝试使用$ timeout函数。这样.get方法在返回时会有一个repsonse。看看我的答案是一个eidt – Henry00

相关问题