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

时间:2018-06-18 22:53:51

标签: javascript angularjs angularjs-ng-repeat angularjs-ng-click

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

当前代码更新列表中项目的selected属性:

<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
}

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

2 个答案:

答案 0 :(得分:3)

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

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

根据您的使用案例

,您可能希望使用ng-checked而不是ng-model

答案 1 :(得分:1)

值不会返回到模板,因此会丢失。请尝试以下方法:

<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();
}