ng 类指令调用执行两次
ng-class directive call executed twice
Simple html:
<table class="table table-condensed">
<tr data-ng-repeat="customer in customers" data-ng-class="customerSelectedClass(customer)">
<td>
<a href="" data-ng-click="selectCustomer(customer)">{{customer.Name}}</a>
</td>
</tr>
</table>
在我的控制器中 - 两个函数用于选择客户并返回正确的类以突出显示表行:
$scope.customerSelectedClass = function (customer) {
if (customer == $scope.selectedCustomer) {
console.log('returing info for ' + customer.Name);
return "info";
}
return "";
};
$scope.selectCustomer = function (customer) {
console.log('selecting ' + customer.Name);
$scope.selectedCustomer = customer;
}
我注意到,当我单击客户链接时,customerSelectedClass 函数会执行两次。 ng-click 指令上的 selectCustomer 函数执行一次,这是应该的。Angular 只在页面上包含一次。我想知道这是 Angular 中的错误还是我做错了什么?
在幕后,angular 正在解析类名的函数上设置一个$watch
。 由于 angular 使用脏检查来查看是否有更改,因此在$digest
周期中将调用此方法两次。 这没关系。
我建议您不要将此代码添加到控制器中,因为如果您要管理许多 css 类,您可能会添加大量不必要的代码。 请尝试以下操作:
<table class="table table-condensed">
<tr data-ng-repeat="customer in customers" data-ng-class="{'info': customer == selectedCustomer}">
<td>
<a href="" data-ng-click="selectCustomer(customer)">{{customer.Name}}</a>
</td>
</tr>
</table>
然后,就不需要控制器功能customerSelectedClass
。 仅当:
的右侧解析为 true 时,这将添加info
类。 并且在ng-repeat
中解决正确的客户没有问题。
希望这有帮助。
相关文章:
- 防止双击执行两次jQuery post请求
- 单击元素两次后执行操作
- 为什么这个函数执行了两次
- 使用node.js模块,在什么情况下模块会被执行两次
- 必须点击两次按钮才能执行功能
- 是否可以执行两次匿名函数
- onKeyUp 导致代码执行两次
- 选中复选框后函数执行两次
- ng 类指令调用执行两次
- 提交按钮有时会以 html 形式执行两次操作
- 必须单击按钮两次才能执行功能 - jQuery
- AngularJs 基本应用程序执行两次
- jQuery AJAX POST 执行两次
- 防止脚本在执行时运行两次
- jquery ready 函数在我单击锚标记时执行两次
- document.getElementById 导致 jquery 文档准备执行两次
- CasperJS thenOpen() 执行两次
- 脚本执行两次,但时间戳相同
- 在 IE 上,表达式执行两次
- 在angularjs中两次执行控制器的routeparams中的特殊字符