Angularjs ng类行为不清楚
我正在执行下面的代码(来自Brad Green&Shyam Seshadri-O'Reilly的《AngularJS》)。 下面的代码将表中选定行的背景色设置为“红色”,并从以前选定的行中删除背景色。 例如,如果我单击第1行,其背景将设置为“红色”,那么如果我单击第2行,其背景将设置为“红色” 以及第#1行的背景色变得正常(即,现在不是红色) 我不清楚,即使我没有编写代码来重新设置其他行的背景色,它是如何被重置的Angularjs ng类行为不清楚,angularjs,ng-class,Angularjs,Ng Class,我正在执行下面的代码(来自Brad Green&Shyam Seshadri-O'Reilly的《AngularJS》)。 下面的代码将表中选定行的背景色设置为“红色”,并从以前选定的行中删除背景色。 例如,如果我单击第1行,其背景将设置为“红色”,那么如果我单击第2行,其背景将设置为“红色” 以及第#1行的背景色变得正常(即,现在不是红色) 我不清楚,即使我没有编写代码来重新设置其他行的背景色,它是如何被重置的 <!-- View/Html --> .selecte
<!-- View/Html -->
.selected {
background-color: red;
}
<table ng-controller="DynamicStyleCtrl">
<tr ng-repeat='resturant in directory' ng-click='selectResturant($index)'
ng-class='{selected: $index==selectedRow}'>
<td>{{resturant.name}}</td>
<td>{{resturant.cuisine}}</td>
</tr>
</table>
<!-- Controller -->
function DynamicStyleCtrl($scope) {
$scope.directory = [
{name:'The Handsome Heifer', cusine:'BBQ'},
{name:'Greens', cusine:'Salads'},
{name:'Fine Fish', cusine:'Sea food'}
];
$scope.selectResturant = function(row){
$scope.selectedRow=row;
}
}
.选定{
背景色:红色;
}
{{resturant.name}
{{餐厅、美食}
函数DynamicStyleCtrl($scope){
$scope.directory=[
{姓名:'英俊的小母牛',库辛:'烧烤',
{名称:'Greens',cusine:'Salads'},
{名称:'Fine Fish',cusine:'Sea food'}
];
$scope.selectResturant=功能(行){
$scope.selectedRow=行;
}
}
当$index==selected行时,以下代码将应用类“selected”
ng-class='{selected: $index==selectedRow}'
因此,当选中该行时(通过ng单击),该行将具有“selected”类,该类将由于以下css而将背景颜色设置为红色:
.selected {
background-color: red;
}
当由于选择了另一行而未选择该行时,通过ng类应用的“已选择”类将被删除,相应的css将不再应用,因此不再为红色
希望这会有所帮助。所有绑定都会在每个
$digest
周期中重新计算,因此选中的表达式会在每行中重新计算。您看到的是Angular的$digest
循环正在运行:ng class
指令允许您有条件地将CSS类绑定到DOM元素,基于某种表达。这些表达式中的引用被添加到Angular的$watch
列表中,该列表是对作用域属性(或其他变量)的引用集合,这些属性可能会随着浏览器事件而更改。当事件发生时,Angular可以调用其$digest
循环,在该循环中,Angular使用其$watch
列表更新数据绑定(在页面上)或触发$watch
回调(在控制器内部),保持应用程序同步。感谢Kirill和Michael的解释,它回答了我的问题。现在我可以理解,由于属性“selectedRow”属于$scope,因此此属性中的任何更改都将重置所有绑定,请回答。我认为$digest循环…/绑定重置。。。清楚地解释了这种行为。