在AngularJS控制器之间共享数据?

9 浏览
0 Comments

在AngularJS控制器之间共享数据?

这个问题已经在这里有了答案:

一个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'];

admin 更改状态以发布 2023年5月21日
0
0 Comments

当您引用CooSelection服务时,您期望得到一个数组,但工厂返回了一个对象。您可以改为这样做:

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

另外,在您的DebugCooList控制器中,您的作用域属性与您在视图中检查的变量名不匹配。 控制器代码分配给coo_selection,但视图检查coo_list_selection,因此您需要更改其中一个以匹配另一个。

0