Angular 1.4 - 如何将 ng-click 项目的逻辑从模板移动到控制器?

Angular 1.4 - How to move logic for ng-click item from template to controller?

我希望修改一些代码,以便为 ng-repeat 中的 ng-click 事件添加更多功能。

当前代码更新为列表中的项目选择的属性:

<li ng-repeat="value in facet.values" ng-click="value.selected = (value.selected == 0) ? 1 : 0; accountSearch()">
  ...
</li>

我想更新所选 属性,但也向我们的分析提供程序触发一个事件:

<li ng-repeat="value in facet.values" ng-click="itemClicked(value)">
  ...
</li>

然后在我的控制器中:

$scope.itemClicked = function(value){
  value.selected = (value.selected == 0) ? 1 : 0; $scope.accountSearch();
  // do other things
}

问题是上面的代码实际上不会修改模板中选择的属性。如何重新创建此行为,但将逻辑移至控制器?

它不更新的原因是它可能不再绑定到模型。试试这个:

<li ng-repeat="value in facet.values" ng-click="itemClicked(value)">
  <input type="checkbox" ng-model="value.selected" />
</li>

根据您的用例,您可能希望使用 ng-checked 而不是 ng-model

值没有返回到模板,所以丢失了。请尝试以下操作:

<li ng-repeat="value in facet.values" ng-click="itemClicked($index)">
  ...
</li>


$scope.itemClicked = function(index){
  $scope.facet.values[index].selected = ($scope.facet.values[index].selected == 0) ? 1 : 0; 
  $scope.accountSearch();
}