![](/img/trans.png)
[英]Why does the oninput event behave differently in Angular than it does in JavaScript?
[英]Why angular JS behave differently?
在Angular JS控制器中,我們將列表放入$ scope中,如下所示:
$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中的輸出是:-----------------------在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的新手,我不完全理解我的代碼塊之間的區別。 有人可以幫忙嗎? 非常感謝提前。
感謝您的答復。 打字時我錯過了$。 實際的代碼確實有$ index。
我想出了問題,似乎ng-repeat創建了自己的范圍,這就是為什么它不起作用。
如果我將代碼更改為:
$scope.obj={
selectedProcess: -1
};
並參考HTML中的obj.selectedProcess。 那會有用。 所以我猜這是由ng-repeat創建的范圍引起的。 對?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.