2015-06-22 4 views
1

Я не уверен, что у меня проблема с «лучшими практиками», когда я пытаюсь решить эту проблему странным и прекрасным способом или владеть захватом AngularJS просто еще нет.Передача/обновление данных на фабрике от одного контроллера до другого

Сценарий: Так что я пытался придумать способ, чтобы иметь «originCity.cityName» будет выводиться на странице несколько раз, все ссылки на один и тот же объект внутри одной и той же фабрике с надеждой, что если я установите его на какое-то другое значение (например, «Test String»), затем он будет ретроактивно заменять все {{originCity.cityName}}, которые у меня есть на странице.

module.service('cityFactory', function() { 

    return { 
     originCity: { 
      cityName: 'TestLocation' 
     }; 

     //Update the city 
     this.update = function (newCityName) { 
      this.originCity.cityName = newCityName; 
     } 
    }); 

В двух отдельных контроллеров у меня есть следующий вызов на завод:

$scope.originCity = cityService.originCity 

И, чтобы продемонстрировать, в отдельном контроллере у меня есть следующий вызов метода обновления завода:

$scope.setCity = function() { 
    cityService.update('Test String'); 
} 

Как я уже упоминал выше, это очень ново для меня, поэтому я мог бы ошибиться, но я надеялся иметь фабрику с методом, который я могу позвонить из любой точки мира e (пока все зависимости находятся в очереди), чтобы обновить это значение в нескольких местах.

Если I console.logthis.originCity.cityName в методе обновления внутри фабрики, то он правильно выводится как Test String, но другие ссылки на данные в настоящее время не обновляются.

+0

Как называется метод обновления? Если вы поместите его в '$ watch', он должен правильно обновиться – Guinn

+0

О, подождите, вы обновите завод .. пропустите это. В этом случае, как вы меняете стоимость? через поле ввода? – Guinn

+0

@Guinn для демонстрационных целей Я старался держать его как можно более простым, поэтому я просто помещал случайную кнопку на странице, чтобы, если я нажму, я вызываю метод обновления. – Aleski

ответ

0
module.factory('cityFactory', function() { 
    var _cityName = null; 
    var cityFactoryInstance = {}; 

    //Update the city from outside the DOM: 
    var _update = function (newCityName) { 
     _cityName = newCityName; 
    } 

    cityFactoryInstance.update = _update; 
    cityFactoryInstance.cityName = _cityName; 
    return cityFactoryInstance; 
}); 

module.controller('controller1', 
    ['$scope','cityFactory', function ($scope, cityFactory) { 

     $scope.originCity.cityName = cityFactory.cityName; 
    }]); 

module.controller('controller2', 
    ['$scope', 'cityFactory', function ($scope, cityFactory) { 

     $scope.originCity.cityName = cityFactory.cityName; 
    }]); 

В DOM:

{{originCity.cityName}} 
Смежные вопросы