احصل على جميع النطاقات الفرعية في Angularjs بالنظر إلى النطاق الأصلي

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

سؤال

أود أن أعرف كيفية الحصول على قائمة بجميع النطاقات الفرعية بالنظر إلى النطاق الأصلي.كل ما يمكنني العثور عليه من خصائص النطاق هو $$childHead و$$childTail و$$nextSibling و$$prevSibling.

الطريقة التي أستخدمها الآن هي الحصول على ChildHead من الوالد ثم استخدام nextSibling للحصول على الطفل التالي حتى يصبح nextSibling فارغًا.

هل هناك طريقة أفضل؟نظرًا لأنني أرغب في استدعاء طريقة [getModel] لجميع الأطفال، فهل هناك طريقة أفضل للقيام بذلك مرة أخرى؟

هل كانت مفيدة؟

المحلول

توجيهات الأطفال يستخدمون نطاقات معزولة وفي مثل هذه القيم الخاصة بهم غير مرئية من الوالد. أريد الوصول إلى هذه القيم من النطاق الأصل.

الطريق الزاوي "للتعامل مع مسألة" النطاقات الأصل التي تحتاج إلى الوصول إلى نطاقات الأطفال "هي نقل النموذج إلى الوالد، ولديه نطاقات الأطفال الرجوع إلى خصائص الأصل / البيانات (بدلا من نطاقات الطفل وجود خصائص / نسخ المحلية الخاصة بهم). على سبيل المثال، هذه هي الطريقة التي نتعامل بها مع NG-Repean إذا كان كل تكرار يحتوي على كل تكرار، على سبيل المثال، عنصر نموذج الإدخال (أي، يحتاج كل تكرار يحتاج إلى بيانات Databinding في اتجاهين): صعوبة مع NG-Model، NG-Repech، والمدخلات

مع التوجيهات، حدد أولا مجموعة من الكائنات في النطاق الأصل، ثم الوصول إلى كل نطاق من الأطفال المعزولين إلى حدود نطاق الأصل (أو كائن فردي) باستخدام "=" تدوين البيانات (I.E.E.E). نظرا لأن كائن يتم تقاسمه، فإن النطاقات المعزولة ستشير إلى الكائنات الأصلية (لن تحصل على نسخة محلية). الآن، أي تغييرات تقوم بها إلى خصائص نطاقات الأطفال تتغير في الواقع خصائص النطاق الأصل.

نصائح أخرى

جميع النطاق الزاوي مرتبط بعنصر DOM، يمكنك البدء عن طريق فحص الطفل باستخدام العنصر الحالي لأسفل إلى أي طفل تريد الوصول إليه.مرة واحدة هناك، استخدم الوظيفة أدناه للحصول على النطاق. giveacodicetagpre.

في 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