Javascript $scope.variable,单位为ng repeat
我不理解上面代码中的行为 我有一个Javascript $scope.variable,单位为ng repeat,javascript,angularjs,Javascript,Angularjs,我不理解上面代码中的行为 我有一个$scope.isCollapsedboolean,我在ng repeat start-ng repeat stop块中使用它 据我所知,我希望这两行同时崩溃,因为isCollapsed在这两种情况下都是一样的。但实际上,他们似乎是独立的 是什么导致这种行为 守则: <tr ng-repeat-start="person in persons"> <td> <a href="#" ng-click="isCo
$scope.isCollapsed
boolean,我在ng repeat start
-ng repeat stop
块中使用它
据我所知,我希望这两行同时崩溃,因为isCollapsed在这两种情况下都是一样的。但实际上,他们似乎是独立的
是什么导致这种行为
守则:
<tr ng-repeat-start="person in persons">
<td>
<a href="#" ng-click="isCollapsed = !isCollapsed">{{person.name}}</a>
</td>
<td>
{{person.age}}
</td>
</tr>
<tr collapse="isCollapsed" ng-repeat-end="">
<td colspan="3">
<h3>Details about {{person.name}}</h3>
<p>Some details about {{person.name}}, {{person.age}}</p>
</td>
</tr>
代码笔:
内部控制器
$scope.collapse=function(){
$scope.isCollapsed=!$scope.isCollapsed;
}
给出预期的行为
why ?
因为当您尝试在html中更改isCollapsed时,它位于不同的范围内,但当您通过上述函数方法进行更改时,它位于相同的范围内
要测试这一点,您可以尝试
ng-click="isCollapsed = !isCollapsed;test($index);"
并将测试定义为
$scope.test=function(index){
setTimeout(function(){
console.log('test: '+index);
console.log('$scope.isCollapsed: '+$scope.isCollapsed);
},10)
}
它将始终打印为真
如果你想使用你的方法,就把它当作
$rootScope.isCollapsed = true;
ng-click="$root.isCollapsed = !$root.isCollapsed;"
向dom添加元素的控制器和一些指令创建它们自己的作用域(ng if、ng switch、ng repeat、ng view等)。您可以使用AngularJS Batarang chrome扩展来帮助调试它们。这些值是继承的,但在子范围中设置值会破坏继承
以上文字摘自
没有指定第一个
tr
元素何时折叠的属性。在第二个
元素中,属性collapsed=“isCollapsed”
将根据isCollapsed
值折叠元素。我对您的尝试投了赞成票,但我的问题是“是什么导致了这种行为?”而不是如何解决它:3我指的是ng重复生成的2(因为$scope.person中有2个元素)
$scope.test=function(index){
setTimeout(function(){
console.log('test: '+index);
console.log('$scope.isCollapsed: '+$scope.isCollapsed);
},10)
}
$rootScope.isCollapsed = true;
ng-click="$root.isCollapsed = !$root.isCollapsed;"