Pregunta

Me gustaría saber cómo obtener una lista de todos los ámbitos secundarios dado un ámbito primario.Todo lo que puede encontrar a partir de las propiedades de alcance son $$childHead, $$childTail, $$nextSibling y $$prevSibling.

El enfoque que estoy usando ahora es conseguir que el childHead de los padres y, a continuación, utilizando la nextSibling para obtener el siguiente niño hasta nextSibling es nulo.

Hay un método mejor?Dado que quiero llamar a un método [llamado getmodel] en todos los niños, hay de nuevo una mejor manera de hacer esto?

¿Fue útil?

Solución

Las directivas infantiles están utilizando los ámbitos aislados y, a tales, tienen sus propios valores que no son visibles desde el padre. Quiero acceder a estos valores del ámbito de los padres.

La 'forma angular' para lidiar con la cuestión de "los ámbitos de los padres que necesitan acceso a los ámbitos infantiles" es mover el modelo hacia arriba en el padre, y hacer que los ámbitos infantil hacen referencia a las propiedades / datos de los padres (en lugar de los escopos infantiles Tener sus propias propiedades / copias locales). Por ejemplo, esta es la forma en que tratamos con NG-Repetir si se contiene cada iteración, por ejemplo, un elemento de formulario de entrada (es decir, cada iteración necesita indicador de datos de dos vías): Dificultad con NG-Model, NG-Repett y Entradas

Con las directivas, primero defina una matriz de objetos en el ámbito de los padres, luego tiene cada alcance secundario aislado Acceda a la matriz de alcance de los padres (o objeto individual) utilizando la notación '=' (I.E., Notación de Date de datos de dos vías). Debido a que se está compartiendo un objeto, los ámbitos aislados hará referencia a los objetos principales (no recibirán una copia local). Ahora, cualquier cambio que realice a las propiedades de los ámbitos infantil en realidad está cambiando las propiedades del alcance de los padres.

Otros consejos

Todo el alcance angular está unido al elemento DOM, puede comenzar a inspeccionar al niño utilizando el elemento actual hacia abajo a cualquier niño que desee alcanzar.Una vez allí, use la función a continuación para obtener el alcance.

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

En AngularJS 1.3.2, un countChildScopes el método fue añadido a la ngMock módulo:

/**
* @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;
  }

El uso de un objeto como valor de retorno para obtener el Id:

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;
  }

Referencias

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top