2015-10-29 41 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

相關問題