我想知道如何获取给定父范围的所有子范围的列表。我可以从范围的属性中找到 $$childHead、$$childTail、$$nextSibling 和 $$prevSibling。
我现在使用的方法是从父级获取 childHead,然后使用 nextSibling 获取下一个子级,直到 nextSibling 为空。
有更好的方法吗?鉴于我想对所有孩子调用一个方法 [getModel],还有更好的方法吗?
我想知道如何获取给定父范围的所有子范围的列表。我可以从范围的属性中找到 $$childHead、$$childTail、$$nextSibling 和 $$prevSibling。
我现在使用的方法是从父级获取 childHead,然后使用 nextSibling 获取下一个子级,直到 nextSibling 为空。
有更好的方法吗?鉴于我想对所有孩子调用一个方法 [getModel],还有更好的方法吗?
所有 Angular 范围都附加到 DOM 元素,您可以从使用当前元素检查子元素开始,直到您想要访问的任何子元素。到达那里后,使用以下函数获取范围。
angular.element('#5th_element').scope();
子指令使用隔离作用域,并且在这种情况下具有自己的值,这些值对父级不可见。我想从父范围访问这些值。
处理“需要访问子作用域的父作用域”问题的“角度方式”是将模型向上移动到父作用域,并让子作用域引用父属性/数据(而不是子作用域有自己的本地属性/副本)。例如,如果每次迭代都包含一个输入表单元素(即每次迭代需要双向数据绑定),这就是我们处理 ng-repeat 的方式:ng-model、ng-repeat 和输入的困难
使用指令,首先在父作用域中定义一个对象数组,然后让每个独立的子作用域使用“=”表示法(即双向数据绑定表示法)访问该父作用域数组(或单个对象)。因为一个对象是被共享的,独立的作用域将引用父对象(它们不会得到一个本地副本)。现在,您对子范围属性所做的任何更改实际上都在更改父范围属性。
在 AngularJS 1.3.2 中,countChildScopes向 ngMock 模块添加了一个方法:
/**
* @ngdoc 方法
* @name $rootScope.Scope#$countChildScopes
* @module ngMock
* @描述
* 计算当前作用域的所有直接和间接子作用域。
*
* 当前范围不包括在内。该计数包括所有隔离子范围。
*
* @returns {number} 子作用域的总数。
*/
函数 countChildScopes(范围)
{
// jshint 有效this: true
变量计数 = 0; // 排除当前范围
var root = 范围 || angular.element(document).injector().get('$rootScope');
var pendingChildHeads = [root.$$childHead];
变量当前范围;
while (pendingChildHeads.length)
{
currentScope = pendingChildHeads.shift();
而(当前范围)
{
计数 += 1;
pendingChildHeads.push(currentScope.$$childHead);
currentScope = currentScope.$$nextSibling;
}
}
返回计数;
}
使用对象作为返回值来获取 ID:
函数枚举ChildScopes(范围)
{
// jshint 有效this: true
变量枚举 = {}; // 排除当前范围
var root = 范围 || angular.element(document).injector().get('$rootScope');
var pendingChildHeads = [root.$$childHead];
变量当前范围;
while (pendingChildHeads.length)
{
currentScope = pendingChildHeads.shift();
而(当前范围)
{
枚举[“范围”+pendingChildHeads.length] = currentScope.$id;
pendingChildHeads.push(currentScope.$$childHead);
currentScope = currentScope.$$nextSibling;
}
}
返回枚举;
}
参考