Как передавать значения между контроллерами с фабрикой?

Я пытаюсь передать данные между (я думаю) двумя дочерними контроллерами. Попытка сделать это с фабрикой.

testFactory.js

          app= angular.module('testApp');
          app.factory('values', [function () {

    var testValues= {
        valueA: ''
    };

    return {
        setValueA: function(a) {
            testValues.valueA= a;
        },
        getValueA: function() {
            return testValues.valueA;
        }
    };
}]);

В разных JS файлах так разные контроллеры. controller1.js (этот устанавливает значение)

angular.module('testApp')
    .controller('firstCtrl', ['$scope''values',
        function ( $scope, values) {

       values.setValueA("MyTestValue");

}]);

controller2.js это считывает значение.

angular.module('testApp')
    .controller('secondCtrl', [ '$scope', 'values',
        function ( $scope, values) {

        $scope.valueA = values.getValueA();   

}]);

Я включаю js на стороне HTML. Оба контроллера заводские видят (функции вижу при отладке). Моя проблема в том, что второй не имеет никаких значений. Как будто это совершенно новый метод. Не уверен, что мне не хватает?


person Max Power    schedule 18.10.2017    source источник
comment
Нет никакой гарантии, что firstCtrl будет полностью инициализирован к моменту инициализации secondCtrl, поэтому значение, установленное в firstCtrl, может быть не установлено. Самый простой (хотя, возможно, и не лучший) способ синхронизировать эти значения — использовать $scope.$watch на values.getValueA();.   -  person laughingpine    schedule 18.10.2017
comment
Еще не пробовали внедрить службу (возвращенную с завода) в firstCtrl и secondCtrl?   -  person Andrea    schedule 18.10.2017


Ответы (1)


person    schedule
comment
Я не сомневаюсь, что это работает. Моя проблема, кажется, в том, что когда я разбиваю его на разные файлы, они теряются. В first.html есть ссылка на фабрику с тегом script. В файле second.html также должна быть ссылка на фабрику с тегом script. Кажется, что каждый контроллер инициализирует фабрику до новой. Не уверен, как вызвать фабрику, чтобы она не инициализировалась каждый раз. - person Max Power; 20.10.2017