2015-12-21 66 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