Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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
Javascript $scope.variable,单位为ng repeat_Javascript_Angularjs - Fatal编程技术网

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;"