从部分更新控制器作用域中的数组

时间:2015-07-27 17:57:50

标签: angularjs angularjs-scope

我正在使用带有控制器(ListController)的isteven-multi-select,它使用" $ scope.mainCategories"对于由"选中"填充的内容布尔值。

在应用程序的标题中,我使用select元素允许用户选择单个类别(然后转发到列表页面)。我正在使用这个select元素来切换$ scope.mainCategories中的勾选布尔值。

两者都使用相同的控制器,尽管通过UI-Router(可能的问题)单独引用

   views: {
    'header@index': {
      templateUrl: 'header.html',
      controller: "ListController"
    },
    'container@index': {
      templateUrl: 'search.html',
      controller: 'ListController'
    },
  }

然后isteven-multiselect和select元素在同一部分 - 功能有效 - 当在单独的部分上时功能被破坏。

Plunker

2 个答案:

答案 0 :(得分:1)

x可能不是您所期望的,因为除非您传入实际对象,否则无法在此行中查找对象索引:

var x = $scope.mainCategories.indexOf(item);

我假设你试图传递类似的内容:

{
  category: "Adventure",
  ticked: false
}

并获得索引,它将无法正常工作。例如,您需要遍历数组并匹配category

但是你修改外部数组的方法很好。

请参阅此示例以了解我的意思:

var people = [
  {name: 'Shomz'},
  {name: 'John'}
];

alert(people.indexOf({ name: 'John'})); // -1: the copy of object not found
alert(people.indexOf(people[1]));       //  1: actual reference found

范围更新

要手动更新范围,请将代码包装在$ timeout回调中,或使用:

$scope.$apply();

答案 1 :(得分:1)

$scope.update = function(item) {
  item.ticked = true; // ?
};

$scope.mainCategories = [{
  category: "Adventure",
  ticked: false
},{category: "Fantasy", 
ticked: false}];   

让你的函数获取你想要修改的对象并从视图中传入它。