有棱角的如何获得ng重复项范围的访问权限
Angular. How to get access of ng-repeat item scope
代码:
<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操作的情况下访问此范围?
在控制器中定义数组。然后你可以很容易地访问:
<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]...
})
您要做的事情,可以在中继器内部轻松完成。
<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/anything)。仅在指令内部,即使尽量将其保持在最低限度。
免责声明:不要在实际应用程序中使用此代码!
好吧,这是一件可怕的事情,但为了学术兴趣,我将发布如何从控制器获得儿童范围的答案。
由于ngRepeat
为每个渲染项创建当前$scope
的子作用域,所以您所需要做的就是读取$$childHead
($first
项),然后从中检查$$nextSibling
作用域,直到找到必要的作用域对象。
需要注意的一点是:您需要在下一个摘要周期中运行对象搜索,因为在中执行摘要控制器的过程中还没有任何呈现。因此,您可以使用$timeout
服务:
$timeout(function() {
var childScope = $scope.$$childHead;
while (childScope = childScope.$$nextSibling) {
if (childScope.item.id === 3) {
break;
}
}
console.log(childScope);
alert(JSON.stringify(childScope.item));
});
演示:http://plnkr.co/edit/KLtTSnrS8lIEejMhKuby?p=preview
相关文章:
- 可以't访问JavaScript函数范围中的变量
- 如何从chrome扩展访问angularjs根范围
- 访问内部功能范围的元素,而不是敲除中的外部
- 将 NodeJS 模块范围变量作为对象访问
- 主干.js(具有 Require.js)变量/范围访问问题
- AngularJS:从控制器访问特定的指令范围
- Angularjs:访问范围变量数组并计算平均值
- 如何访问嵌套的表单ng包含范围/字段
- 有棱角的如何获得ng重复项范围的访问权限
- 我怎么把范围弄错了?无法从jQuery访问此函数;.在“上”;
- webGL,javascript:尝试访问属性1中超出范围的顶点
- 是否有任何方法可以访问外部范围's变量
- 淘汰赛:can't从嵌套foreach访问父级范围的属性
- WebDriver Selenium:Javascript代码覆盖范围,无需服务器访问
- JS范围访问
- 从不同范围访问较新版本的变量(JavaScript / jQuery)
- 从外部绑定范围访问knockoutjs ViewModel
- 使用指令将具有范围访问权限的功能附加到html元素
- angular 1.5无范围访问http.get中的数据
- 从其他范围访问对象(javascript)