如何基于 ng-change 更新 ng-class?
How to update ng-class based on ng-change?
我有一个 ng-repeat 可以创建多个小部件,每个小部件都有自己的 select 下拉菜单。
<div ng-repeat="item in widget.items" class="col-md-6">
<select ng-model="item.chosenTag"
ng-change="widget.updateTag(item)"
ng-class="widget.getButtonClass(item.tag, item.id)">
<option value="companies"
ng-selected="{{item.tag == 'companies'}}"
changed="companies">companies</option>
<option value="news"
ng-selected="{{item.tag == 'news'}}"
changed="news">news</option>
<option value="people"
ng-selected="{{item.tag == 'people'}}"
changed="people">people</option>
</select>
</div>
加载视图时,ng-class="widget.getButtonClass(item.tag, item.id)"
调用一个函数来检查是否满足 2 个值,然后将 ng-class
设置为 btn-success
或 btn-default
。
// This checks the view after load to change the class on each widget select
var vm = this;
vm.getButtonClass = function(tag, id) {
console.log('in getButtonClass');
if (tag && id) {
return 'btn-success';
} else {
return 'btn-default';
}
};
接下来,如果用户现在更新任何小部件中的 select,ng-change
将更新为正确的值。
但是我需要以某种方式重新运行 ng-class
检查或者只是继续并将 btn-success
添加到 select 无需刷新页面。
您将如何完成这项工作?
有没有办法做这样的事情?
ng-class="{ functionToUpdateAll | boolean based on ng-change }"
我建议不要调用 ng-class
中的函数,只需将其分配给一个变量即可:
<select ng-model="item.chosenTag"
ng-change="widget.updateTag(item)"
ng-class="mySelectClass">
然后在控制器的 updateTag
函数中更新该变量:
vm.updateTag = function(item) {
if (item.tag && item.id) {
vm.mySelectClass = 'btn-success';
} else {
vm.mySelectClass = 'btn-default';
}
};
是否有任何特定原因需要调用该函数?为什么不直接绑定到那些变量?
ng-class="'btn-success':item.tag && item.id, 'btn-default': !(item.tag && item.id)"
通过这种方式,您可以利用相互绑定,即每当 item.tag 或 item.id 更改时,class 将相应地进行评估。
我有一个 ng-repeat 可以创建多个小部件,每个小部件都有自己的 select 下拉菜单。
<div ng-repeat="item in widget.items" class="col-md-6">
<select ng-model="item.chosenTag"
ng-change="widget.updateTag(item)"
ng-class="widget.getButtonClass(item.tag, item.id)">
<option value="companies"
ng-selected="{{item.tag == 'companies'}}"
changed="companies">companies</option>
<option value="news"
ng-selected="{{item.tag == 'news'}}"
changed="news">news</option>
<option value="people"
ng-selected="{{item.tag == 'people'}}"
changed="people">people</option>
</select>
</div>
加载视图时,ng-class="widget.getButtonClass(item.tag, item.id)"
调用一个函数来检查是否满足 2 个值,然后将 ng-class
设置为 btn-success
或 btn-default
。
// This checks the view after load to change the class on each widget select
var vm = this;
vm.getButtonClass = function(tag, id) {
console.log('in getButtonClass');
if (tag && id) {
return 'btn-success';
} else {
return 'btn-default';
}
};
接下来,如果用户现在更新任何小部件中的 select,ng-change
将更新为正确的值。
但是我需要以某种方式重新运行 ng-class
检查或者只是继续并将 btn-success
添加到 select 无需刷新页面。
您将如何完成这项工作?
有没有办法做这样的事情?
ng-class="{ functionToUpdateAll | boolean based on ng-change }"
我建议不要调用 ng-class
中的函数,只需将其分配给一个变量即可:
<select ng-model="item.chosenTag"
ng-change="widget.updateTag(item)"
ng-class="mySelectClass">
然后在控制器的 updateTag
函数中更新该变量:
vm.updateTag = function(item) {
if (item.tag && item.id) {
vm.mySelectClass = 'btn-success';
} else {
vm.mySelectClass = 'btn-default';
}
};
是否有任何特定原因需要调用该函数?为什么不直接绑定到那些变量?
ng-class="'btn-success':item.tag && item.id, 'btn-default': !(item.tag && item.id)"
通过这种方式,您可以利用相互绑定,即每当 item.tag 或 item.id 更改时,class 将相应地进行评估。