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();
}
我希望修改一些代码,以便为 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();
}