2015-10-17 2 views
0

Чтобы обмениваться данными между controllers, большая часть переполнения стека Ответы предлагают использовать services. В основном, когда я обмениваюсь данными между controllers, это моя модель приложения (данные), и она изменяется в каждом controller в соответствии с логикой приложения. Итак, не должно быть angular value вместо angular service?Обмен данными между контроллерами: обслуживание или стоимость?

Для примера возьмем следующие service,

app.factory('Employee',function($http){ 
     function Employee(){ 
      this.data = {}; 
     } 
     Employee.prototype.load = function(){ 
      //XHR call which invokes employee details and assigns it here 
      $http.get(url).then(
        function(response){ 
         this.data = response.data; 
        } 
     ); 
     } 

     return new Employee(); 
}); 

С этой услугой в руке, я не смог бы inject мою Employee модель во время ui-router «ы resolve (как services не может быть введен в config блоки) , Но если я создаю то же самое с помощью value, я смог бы ввести его во время stateRouting. Не могли бы вы объяснить мне, почему value не является предпочтительным создавать модели/делиться данными между controllers над service?

ответ

2

Во-первых, значения не могут быть введены в конфигурационные блоки. Но это не имеет значения, поскольку функции разрешения не вызываются во время фазы конфигурации, но во время выполнения каждый раз, когда вы переходите к охватывающему маршруту.

Значения не могут быть введены вообще, поэтому я не вижу, как вы будете иметь доступ к $ http при определении своего значения.

Наконец, вы можете доступ к вашим услугам в функции Resolve, просто путем введения его в функцию:

resolve: { 
    employee: function(Employee) { 
     return Employee.load(); 
    } 
} 

Но это не имеет особого смысла, так как нагрузки;() метод не вернуть что-нибудь. Что он должен сделать, это возвращение обещанием работника:

Employee.prototype.load = function(){ 
    return $http.get(url).then(
     function(response) { 
      return response.data; 
     } 
    ); 
}; 

Но это не имеет ничего общего с обменом данными между контроллерами. То, что он позволяет делать, - это ждать, пока данные сотрудника будут доступны и будут вставлять их в контроллер, прежде чем переключиться на просмотр сотрудника.

+0

спасибо. Мне плохо, что с частичными знаниями об угловых службах и неправильной демонстрацией в моей системе я задал вопрос! – DRB

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