我的问题是下面代码中有多少个范围元素,包括isolatedScope,$ scope,$ rootScope。
<script>
angular.module('initExample', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.list = [['a', 'b'], ['c', 'd']];
}]);
</script>
<body ng-app="myApp">
<div ng-controller="ExampleController">
<div ng-repeat="innerList in list" ng-init="outerIndex = $index">
<div ng-repeat="value in innerList" ng-init="innerIndex = $index">
<span class="example-init">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span>
</div>
</div>
</div>
</body>
答案 0 :(得分:3)
会有$rootScope
,
然后会有来自scope
的控制器ExampleController
,
然后,由于ng-repeat
为每一行创建了一个新的scope
,因此外ng-repeat
将创建list.length
范围,ng-init
不会创建新的范围,
现在内部ng-repeat
为每个外部ng-repeat
运行一次,因此它会为每个列表项创建innerList.length
范围。
因此,总范围为:$rootScope
+ $scope
来自Controller + list.length
* innerList.length
。
在这种情况下总计1 + 1 + 2 * 2 = 6.
(我不确定为什么需要这些信息,但现在是这样)。
P.S:您可以查看文档以了解哪些directive
创建了一个新的(隔离的)scope
。
另请注意,如果innerList具有每个列表项的可变长度,则公式将包括innerList长度与外部列表长度的总和,而不是直接乘法,
即(1 * i1 + 1 * i2 + ... outerlist.length次),其中i1,i2是内部列表长度