Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs ng类行为不清楚_Angularjs_Ng Class - Fatal编程技术网

Angularjs ng类行为不清楚

Angularjs ng类行为不清楚,angularjs,ng-class,Angularjs,Ng Class,我正在执行下面的代码(来自Brad Green&Shyam Seshadri-O'Reilly的《AngularJS》)。 下面的代码将表中选定行的背景色设置为“红色”,并从以前选定的行中删除背景色。 例如,如果我单击第1行,其背景将设置为“红色”,那么如果我单击第2行,其背景将设置为“红色” 以及第#1行的背景色变得正常(即,现在不是红色) 我不清楚,即使我没有编写代码来重新设置其他行的背景色,它是如何被重置的 <!-- View/Html --> .selecte

我正在执行下面的代码(来自Brad Green&Shyam Seshadri-O'Reilly的《AngularJS》)。 下面的代码将表中选定行的背景色设置为“红色”,并从以前选定的行中删除背景色。 例如,如果我单击第1行,其背景将设置为“红色”,那么如果我单击第2行,其背景将设置为“红色” 以及第#1行的背景色变得正常(即,现在不是红色)

我不清楚,即使我没有编写代码来重新设置其他行的背景色,它是如何被重置的

    <!-- 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循环…/绑定重置。。。清楚地解释了这种行为。