Невозможно синхронизировать службу AngularJS с контроллерами (angular.copy)

Я установил два контроллера (контроллер A и контроллер B) и службу (Service). Я пытаюсь синхронизировать данные от контроллера А со службой и представить эту информацию контроллеру Б.

В моей службе я установил переменную confirmdata и функции получения и установки:

function setData(data) {
  confirmdata = angular.copy(data);
}

function getData() {
  return confirmdata;
}

В контроллере A я создал функцию syncдля синхронизации информации с контроллера на сервис:

this.sync = function () {
var data = {
payment: this.getpayment()
}
Service.setData(data);

В контроллере B я назначил функцию как:

this.sync  = function () {
this.viewData = Service.getData();
console.log('TestingData', this.viewData);

По неизвестной мне причине; мой консольный журнал просто возвращает undefined, когда он должен возвращать результаты функции getpayment(). Я что-то упустил здесь?


comment
контроллер B может работать до того, как контроллер A установит для него данные?   -  person PSL    schedule 03.11.2015
comment
@PSL может быть прав, поместите console.log в свои контроллеры, чтобы увидеть, какой из них вызывается первым.   -  person Chris    schedule 03.11.2015


Ответы (1)


Тот факт, что вы получаете undefined, указывает на то, что вы не инициализировали «confirmdata» в своей службе. Однако, является ли это реальной проблемой, неясно. В качестве простого примера я бы разработал ваш сервис следующим образом:

myApp.factory('sharedService', [function () {
    var confirmdata = {};
    return {
        setData: function (newData) { confirmdata = newData; },
        getData: function getData() { return confirmdata;  }
    }
}]);

Взгляните на этот плункер. В нем приводится пример обмена данными между контроллерами через службу.

person Adam_O    schedule 03.11.2015