2015-12-21 5 views
0

У меня есть веб-метод на удаленном сервере, возвращающий объект JSon. Объект Said json содержит строки, необходимые для правильной работы модуля.Как передать данные инициализации в угловой модуль?

Итак, есть ли способ передать что-то угловому модулю? идея может быть, чтобы выполнить запрос HTTP внутри инициализации модуля:

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

}; 

Но это было бы асинхронным ...

+0

Почему бы вам не воспользоваться услугой. который может предоставить вам эту конечную точку? – jstuartmilne

+0

ммм ... пример этого? – Phate

+0

Я делаю именно это, чтобы инициализировать определение и схему формы [schemaform.io] (http://schemaform.io) JSONобъектов. Если вы используете сторонний модуль, вы можете инициировать событие для повторной инициализации вашего успеха $ 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 как зависимость ... затем использовать, чтобы присвоить переменные $ области. мои данные.

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

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

Есть и другие способы сделать это, как сказал Суда ... лично я бы включил все взаимодействие REST внутри службы. Затем в рамках разрешения я бы вызвал функцию loadMyData() для получения данных из API ... тогда в контроллере вы знаете, что данные уже инициализированы в службе. Таким образом, вы можете установить ... $ scope.myData = myDataService.getMyData(); (это не вызов API, а ссылка на службу singleton, которая содержит данные, которые он уже вытащил из API). – Marcidius

Смежные вопросы