代码之家  ›  专栏  ›  技术社区  ›  Connor Leech

角度1.4-如何将ng单击项的逻辑从模板移动到控制器?

  •  2
  • Connor Leech  · 技术社区  · 6 年前

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

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   Vega Stipe    6 年前

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

    <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();
    }
    
        2
  •  3
  •   mwilson    6 年前

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

    ng-checked ng-model