Question

Je voudrais savoir comment obtenir une liste de tous les enfants étendues donné un parent.Tout ce que je peux trouver à partir des propriétés de la portée sont $$childHead, $$childTail, $$nextSibling et $$prevSibling.

L'approche que j'utilise maintenant est d'obtenir le childHead de la mère, puis à l'aide de la nextSibling pour obtenir le prochain enfant, jusqu'à ce nextSibling est null.

Est-il une meilleure approche?Étant donné que je veux appeler une méthode [getModel] sur tous les enfants, est-il encore une meilleure manière de faire ceci?

Était-ce utile?

La solution

Les directives pour enfants utilisent des étendues isolées et de telles valeurs ne sont pas visibles du parent. Je veux accéder à ces valeurs de la portée des parents.

La «voie angulaire» de traiter la question des «Scopes des parents ayant besoin d'un accès à l'enfance» est de déplacer le modèle en place dans le parent et de faire référence à l'enfance de référencer les propriétés / données des parents (plutôt que les champs d'enfant. avoir leurs propres propriétés / copies locales). Par exemple, c'est ainsi que nous traitons avec NG-REPEAT si chaque itération contient, par exemple, un élément de formulaire d'entrée (c'est-à-dire que chaque itération a besoin de la base de données bidirectionnelle): Difficulté avec NG-Modèle, NG-REPEAT et INPUTS

Avec des directives, définissez d'abord une gamme d'objets dans la portée des parents, puis chaque champ enfant isolé accède à la matrice de portée parent (ou à un objet individuel) à l'aide de la notation «=» (c'est-à-dire une notation de base de données bidirectionnelle). Étant donné qu'un objet est en cours de partage, les étanches isolées feront référence aux objets parents (ils n'obtiendront pas une copie locale). Maintenant, toute modification que vous apportez aux propriétés des cultures pour enfants change effectivement les propriétés de la portée des parents.

Autres conseils

Toutes les périmètres angulaires sont attachées à DOM Elément, vous pouvez commencer par inspecter l'enfant à l'aide de l'élément actuel jusqu'à tout enfant que vous souhaitez atteindre.Une fois là-bas, utilisez la fonction ci-dessous pour obtenir la portée.

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

Dans AngularJS 1.3.2, un countChildScopes la méthode a été ajouté à la ngMock module:

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

Utiliser un objet comme une valeur de retour pour obtenir les Identifiants:

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

Références

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top