代码:
<div ng-controller="someCtrl">
<span ng-repeat="item in [{id: 1},{id: 2},{id: 3},{id: 4},{id: 5}]"></span>
</div>
使用Javascript:
.controller('someCtrl', function($scope){
//how to get access to child scope of element with id===3?
for(var i = 0,len = $('span').length;i<len;i++){
if($('span').eq(i).scope().id === 3){
//do something with scope of element with id===3
}
}
})
如何在没有DOM操作的情况下访问此范围?
答案 0 :(得分:1)
在控制器中定义数组。然后您可以轻松访问:
<div ng-controller="someCtrl">
<span ng-repeat="item in MyList"></span>
</div>
.controller('someCtrl', function($scope){
$scope.MyList = [{id: 1},{id: 2},{id: 3},{id: 4},{id: 5}]
$scope.Mylist[2]...
})
答案 1 :(得分:0)
您正在尝试做的事情,您可以通过在转发器内部轻松实现。
<div ng-controller="someCtrl">
<span ng-repeat="item in [{id: 1},{id: 2},{id: 3},{id: 4},{id: 5}]">
<!-- do whatever you want -->
<!-- do something specific if it's id === 3 -->
<span ng-if="item.id === 3">
<strong>{{ item.id }}</strong>
</span>
</span>
</div>
此外,你永远不会在控制器/服务/工厂内进行DOM操作(Javascript / jQuery /无论如何)。仅在指令内,即使尽量保持最小。
答案 2 :(得分:0)
Disclamer:在实际应用中不使用此代码!
好的,这是可怕的事情,但为了学术兴趣,我将发布如何从控制器获取子范围的答案。
由于ngRepeat
为每个呈现的项目创建当前$scope
的子范围,所以您需要做的就是阅读$$childHead
($first
item)并从那里检查{ {1}}范围,直到找到必要的范围对象。
有一点需要注意:您需要在 next 摘要周期中运行对象搜索,因为在摘要控制器执行期间还没有任何渲染。所以您可以使用$$nextSibling
服务:
$timeout