Angular 1.4 - Как переместить логику для элемента ng-click из шаблона в контроллер?
Я хочу изменить код, чтобы добавить больше функциональности к событию ng-click, которое находится внутри ng-repeat.
Текущий код обновляет выбранное свойство для элемента в списке:
<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
}
Проблема заключается в том, что приведенный выше код не будет фактически изменять выбранное свойство в шаблоне. Как я могу восстановить это поведение, но перенести логику в контроллер?
2 ответа
Значение не возвращается в шаблон, поэтому оно теряется. Попробуйте следующее:
<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();
}
Причина, по которой он не обновляется, заключается в том, что он, вероятно, больше не связан с моделью. Попробуй это:
<li ng-repeat="value in facet.values" ng-click="itemClicked(value)">
<input type="checkbox" ng-model="value.selected" />
</li>
Вы можете использовать ng-checked
вместо ng-model
на основе вашего варианта использования