2015-12-21 100 views
0

我在我的遠程服務器上返回一個JSon對象的webmethod。 表示json對象包含模塊正常工作所需的字符串。如何將初始化數據傳遞給角度模塊?

那麼,有沒有辦法將某些東西傳遞給角度模塊? 一個想法可能是模塊的初始化內執行HTTP請求:

$scope.init = function(){ 
     $http.get() 
      ... 
     then(){ 
       $scope.mydata = result; 
     } 

}; 

但是,這將是異步的......

+0

爲什麼不通過服務。那可以爲你提供那個終點? – jstuartmilne

+0

mmm ...這是一個例子嗎? – Phate

+0

我正在做這個來初始化[schemaform.io](http://schemaform.io)表單定義和模式JSONobjects。如果您正在使用第三方模塊,則可以觸發事件以重新初始化$ http.get()成功,或者如果它是您自己的模塊,請創建一個函數,使用新數據重新初始化模塊。 –

回答

1

如果你擔心的HTTP請求的異步性質填寫你的$ scope.mydata變量,然後你需要將它包含在你的路由中的RESOLVE中。

我使用的UI路由器在我當前的項目:

(function() { 
    'use strict'; 

    angular 
     .module('capps.core') 
     .config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) { 
      $urlRouterProvider.otherwise('/'); 

      $stateProvider 
       .state('home.capps', { 
        url: '/', 
        template: '<ui-view/>', 
        data: { 
         requireLogin: true 
        }, 
        resolve:{ 
         resolveFunction: resolveFunction 
        } 
       }); 
     } 
    ]); 

    resolveFunction['$inject'] = ['$http']; 
    function resolveFunction($http) { 
     return $http.get(API_URL) 
       .then(function(res) { 
        console.log(res); 
       }); 
    } 
})(); 

然後在你的控制器,你可以通過「resolveFunction」作爲一個依賴...然後使用分配給您的$範圍。 MYDATA的。

... 
angular.controller('myController', myController); 

myController.$inject = ['resolveFunction', '$scope']; 
function myController(resolveFunction, $scope) { 
    $scope.mydata = resolveFunction.data; 
    console.log(mydata); 
}; 
+0

還有其他一些方法可以做到這一點,比如Suda說...我個人會在服務中包含所有REST交互。然後在解決方案中,我會調用loadMyData()函數以從API獲取數據...然後在控制器中,您知道數據已在服務中初始化。所以你可以設置... $ scope.myData = myDataService.getMyData(); (這不是一個API調用,而是包含已從API中提取的數據的單例服務的引用)。 – Marcidius

相關問題