我希望修改一些代码,为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属性。如何重新创建此行为,但将逻辑移动到控制器?
答案 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();
}