我有左侧按钮的字段列表(待办事项)。我想点击其中一个按钮,以便计算此特定字段的值。
我得到的是点击特定按钮计算并显示所有字段的相同结果
这就是我写的:
<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;
}
我做错了什么?
答案 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){