Обмен данными между контроллерами AngularJS?

Как сохранить элементы, которые я выбрал в флажке, с другими контроллерами?

Моя попытка (см. plnkr для просмотров):

script.js (контроллеры)

var myApp = angular.module('myApp', []);

myApp.factory('CooSelection', function () {
  return {selectedCoo: []}
})

function CooListCtrl($scope, CooSelection) {
  $scope.coos = {"Coos": ["spark", "nark", "hark", "quark"]};

  $scope.coo_list_selection = CooSelection;

  $scope.checkSelection = function (item) {
    if ($scope.coo_list_selection.indexOf(item) === -1) {
      $scope.coo_list_selection.push(item);
    } else {
      $scope.coo_list_selection.splice($scope.coo_list_selection.lastIndexOf(item), 1);
    }
  }
}

CooListCtrl.$inject = ['$scope', 'CooSelection'];

function DebugCooList($scope, CooSelection) {
  $scope.coo_selection = CooSelection;
}

DebugCooList.$inject = ['$scope', 'CooSelection'];

person Foo Stack    schedule 02.06.2013    source источник


Ответы (1)


Когда вы ссылаетесь на службу CooSelection, вы ожидаете массив, но фабрика возвращает объект. Вместо этого вы можете сделать это:

myApp.factory('CooSelection', function () {
    return [];    // Return an array instead of an object.
})

Кроме того, в вашем контроллере DebugCooList ваше свойство области действия не соответствует имени переменной, которую вы проверяете в представлении. Код контроллера назначается coo_selection, но представление проверяет coo_list_selection, поэтому вам нужно изменить одно, чтобы оно соответствовало другому.

person Dan    schedule 02.06.2013