我的示例代码(在那里)提出了两个问题:
简单地加载页面时,每个项目都会调用“renderthis”函数两次
主要问题 - 单击按钮时,我假设在评估 doit() 表达式后,ng-click 会在范围上调用 $apply,这会导致每个项目的两个 DOM 元素被重新渲染。现在,我了解这里每个项目的范围以某种方式绑定到父范围或通过一些奇怪的隔离或嵌入或诸如此类的东西与之相关,这是我尚未掌握的东西.. 有没有办法让 ng-click 只调用 $digest在每个项目的子范围或类似的东西上?
这是我的代码:
html:
<body ng-controller="MainCtrl">
<ul>
<li ng-repeat="item in items">
<div>
<span>{{item.title}}</span>
<span>{{renderthis()}}</span>
<span>{{item.number}}</span>
<button ng-click="doit()">CLIQUE!</button>
</div>
</li>
</ul>
</body>
JS:
var app = angular.module('angularjs-starter', []);
app.controller('MainCtrl', function($scope) {
$scope.doit = function(){
console.log('doing it for item with title --> ', this.item.title);
}
$scope.renderthis = function(){
console.log('rendering this for item with title -->', this.item.title);
return '|';
}
$scope.items = [{title: 'hello', number: 1}, {title: 'shalom', number: 42}];
});
或者看到这个plnkr: