Получите все дочерние области в Angularjs с учетом родительской области.

StackOverflow https://stackoverflow.com//questions/12649080

Вопрос

Я хотел бы знать, как получить список всех дочерних областей с учетом родительской области.Все, что я могу найти в свойствах области, это $$childHead, $$childTail, $$nextSibling и $$prevSibling.

Подход, который я использую сейчас, состоит в том, чтобы получить childHead от родителя, а затем использовать nextSibling для получения следующего дочернего элемента до тех пор, пока nextSibling не станет нулевым.

Есть ли лучший подход?Учитывая, что я хочу вызвать метод [getModel] для всех дочерних элементов, есть ли лучший способ сделать это?

Это было полезно?

Решение

Детские директивы используют изолированные области и при таких имеют свои значения, которые не видны от родителя. Я хочу получить доступ к этим значениям из родительской области.

«Угловой способ», чтобы иметь дело с проблемой «родительских областей, нуждающихся в доступе к доступам в детские природы», состоит в том, чтобы переместить модель в родительском языке, и иметь редуктовую ссылку на родительские свойства / данные (а не детские имея свои местные свойства / копии). Например, это то, как мы имеем дело с NG-Repear, если каждая итерация содержит, скажем, элемент формы ввода (т. Е. Каждая итерация нуждается в двухстороннем документе): Сложность с NG-моделью, NG-Repeat и входами

с директивами, сначала определите массив объектов в родительской области, затем у каждого изолированного доступа к детям доступа к тому, что родительский массив (или отдельный объект) с использованием записи «=» (I.E., двусторонняя обозначение данных). Поскольку объект совместно используется, изолированные призывы будут ссылаться на родительские объекты (они не получит локальную копию). Теперь любые изменения, которые вы совершаете на свойства для детей, на самом деле меняют свойства родительской области.

Другие советы

Все угловые возможности прикреплены к элементу DOM, вы можете начать с осмотра ребенка с использованием текущего элемента до того, какой ребенок вы хотите достичь.После этого используйте функцию ниже, чтобы получить объем.

angular.element('#5th_element').scope();
.

В AngularJS 1.3.2 countChildScopes метод был добавлен в модуль ngMock:

/**
* @ngdoc method
* @name $rootScope.Scope#$countChildScopes
* @module ngMock
* @description
* Counts all the direct and indirect child scopes of the current scope.
*
* The current scope is excluded from the count. The count includes all isolate child scopes.
*
* @returns {number} Total number of child scopes.
*/
function countChildScopes(scope) 
  {
  // jshint validthis: true
  var count = 0; // exclude the current scope
  var root = scope || angular.element(document).injector().get('$rootScope');
  var pendingChildHeads = [root.$$childHead];
  var currentScope;

  while (pendingChildHeads.length) 
    {
    currentScope = pendingChildHeads.shift();

    while (currentScope) 
      {
      count += 1;
      pendingChildHeads.push(currentScope.$$childHead);
      currentScope = currentScope.$$nextSibling;
      }
    }

  return count;
  }

Используйте объект в качестве возвращаемого значения для получения идентификаторов:

function enumerateChildScopes(scope) 
  {
  // jshint validthis: true
  var enum = {}; // exclude the current scope
  var root = scope || angular.element(document).injector().get('$rootScope');
  var pendingChildHeads = [root.$$childHead];
  var currentScope;

  while (pendingChildHeads.length) 
    {
    currentScope = pendingChildHeads.shift();

    while (currentScope) 
      {
      enum["scope"+pendingChildHeads.length] = currentScope.$id;
      pendingChildHeads.push(currentScope.$$childHead);
      currentScope = currentScope.$$nextSibling;
      }
    }

  return enum;
  }

Рекомендации

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top