2015-06-04 37 views
1

在角JS控制器,我们把一张表,如下$范围:为什么角JS的行为有所不同?

$scope.processes = ['process-aa','process-bb', 'process-cc']; 
$scope.selectedProcess=-1; 
$scope.collapseProcess = function(index) 
{ 
    console.log('-----------------------in collapseProcess-------------- %s, %s', $scope.selectedProcess, index ); 
    return $scope.selectedProcess != index; 

}; 

$scope.switchCollapse = function(index) 
{ 
    $scope.selectedProcess = index; 
} 

页面会列出所有这些过程,有一个div每一个过程里面,我们做这个div拨动。在任何时候,只有一个div将被允许扩大。 HTML如下:

<li ng-repeat="process in processes" class="resultItem" 
    ng-click="switchCollapse($index)"> 
    <div collapse="collapseProcess($index)" class="collapseBlock"> </div> 
</li> 

上述代码完全按我的预期工作。当我选择第一个进程时,内部DIV将被展开,如果我选择第二个进程,则第一个进程的div将被折叠,第二个进程的div将被展开。

不过,我不明白是为什么,如果我改变代码是不工作:

<li ng-repeat="process in processes" class="resultItem" 
    ng-click="selectedProcess=$index"> 
    <div collapse="toggleProcess($index)" class="collapseBlock"> </div> 
</li> 

如果我改变,因为上面的代码,然后当我点击任何程序, DIV不会被扩大。函数collapseProcess中的输出为: ----------------------- in collapseProcess -------------- -1 0 -----------------------在collapseProcess -------------- -1 1 ------ -----------------在collapseProcess -------------- -1 2

selectedProcess将始终为-1(即控制器中的初始值)。这很奇怪,我不明白为什么它是这样的?

,更有趣,如果我更改HTML是:

<li ng-repeat="process in processes" class="resultItem" 
    ng-click="selectedProcess=$index"> 
    <div collapse="$scope.selectedProcess != index" class="collapseBlock"> </div> 
</li> 

然后,如果我选择一个特定的过程中,其内部的div将扩大,然而,DIV扩大为原来的选择的过程赢得”如果我选择越来越多的流程,越来越多的DIV将会扩大。

由于我是角JS的新手,我不完全理解我的代码块之间的区别。任何人都可以帮忙吗?提前致谢。

+0

在上面的例子中试试这个“$ scope.selectedProcess!= $ index”,索引中缺少$ – Devjit

回答

3

感谢您的回复。打字时我错过了$。实际的代码确实有$ index。

我想出了这个问题,似乎ng-repeat创建自己的范围,这就是为什么它不起作用。

如果我改变的代码是:

$scope.obj={ 
    selectedProcess: -1 
}; 

,并参考obj.selectedProcess在HTML中。那么它会工作。所以我想这是由ng-repeat创建的范围造成的。对?

+0

是的,你是对的 –

相关问题