AngularJS - 计算每个字段的值

时间:2016-03-05 09:51:11

标签: angularjs

我有左侧按钮的字段列表(待办事项)。我想点击其中一个按钮,以便计算此特定字段的值。

我得到的是点击特定按钮计算并显示所有字段的相同结果

这就是我写的:

<h1 ng-show="myVar">
  <ul>
    <li ng-repeat="todo in todos">
      <button ng-show="!editing[$index]" ng-click="edit($index)">click</button>
      <h2> Result is:{{result}}</h2>
      {{todo.name}}
    </li>
  </ul>
  </h1>

和控制器

      $scope.edit = function(index){

        var todo = $scope.todos[index];
        var counter = 0;
        angular.forEach($scope.todos,function(value,index){
            if (todo.topic == 'important')
            {counter = counter+1;}

        })
        $scope.result =  counter;
      }

我做错了什么?

2 个答案:

答案 0 :(得分:2)

基本上result用于绑定的scope变量与在控制器范围内定义的范围变量不同。

因为ng-repeat确实以完全不同的方式工作,所以当它通过循环提供的集合(这里是它的todos)来呈现DOM时,它会为每个迭代创建一个新范围,该范围是原型继承自它的父范围。

在定义模型时使用Dot Rule,以便它遵循原型继承,

$scope.model = {};

//then use 
$scope.model.result = result;

<强> HTML

<h2> Result is:{{model.result}}</h2>

将问题排序的其他方法是在定义控制器时使用controllerAs方法,但在这种情况下,您需要阅读$scope&amp;应该用控制器功能的this上下文替换它。

答案 1 :(得分:0)

您使用相同的index变量名作为函数输入参数 - function(index)和forEach循环,function(value,index){ - 并且它会被覆盖。

//here
$scope.edit = function(index){

  var todo = $scope.todos[index];
  var counter = 0;
//and here
  angular.forEach($scope.todos,function(value,index){