كيف يمكنني إظهار عنصر فقط إذا كان التكرار المتداخل غير فارغ?

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

  •  20-12-2019
  •  | 
  •  

سؤال

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

هنا هو الغطاس شرح مشكلتي ومحاولة حل بلدي : بلنكر

وجود 'الثقيلة' وظيفة مثل إيسجروبيمبتي يبدو مرهقة للغاية-هل هناك أي طريقة للقيام بذلك بطريقة أبسط من ذلك بكثير?كنت ألعب مع فكرة تحريك الملصق داخل نانوغرام الداخلي-كرر وبعد ng-show="$first" لكنها لا تبدو رائعة

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

المحلول

انتهى بي الأمر بالحل التالي الذي عمل تماما. plnkr

عن طريق تحديد متغير في NG-Repear Inner، كنت قادرا على تقييم NG-REPOR بناء على طول المتغيرات هذا مثل ذلك:

giveacodicetagpre.

نصائح أخرى

يمكنك الاستفادة ng-init, ، بهذه الطريقة ستتصل بالفلتر مرة واحدة فقط:

<div ng-repeat='(key,group) in model'>
  <div ng-init="filtered = (group | filter:filterFn)"></div>
  <div ng-show="filtered.length !== 0">
    <div>{{key}}</div>
    <ul>
      <li ng-repeat="el in filtered">
        <div>{{el.label}}</div>
      </li>
    </ul>
  </div>
 </div>

عادة أنها ليست ممارسة جيدة لاستخدام ng-init من أي مكان ، ولكن أعتقد أنه يحل استدعاء المرشح مرتين.وهناك طريقة أخرى لاستخدام عامل التصفية من خلال جافا سكريبت-هل يمكن حقن filter تصفية واسترداد'تصفية' $filter('filter') في وحدة التحكم الخاصة بك ، واصفا إياه مع المجموعة كوسيطة الأولى ، فيلترفن كما الثانية ، وتخزين نتائجه في النطاق الخاص بك.

استخدمت ما يلي:

giveacodicetagpre.

تحقق مما إذا كان صفيف طول 0 ليس عملية مكلفة.إذا كنت ترغب فقط في إظهار القوائم التي تحتوي على عنصر، فضع عامل تصفية على الصفيف الخارجي الذي يأخذ صفيفا من الصفائف وإرجاع صفيفات فقط التي تحتوي على طول مختلفة عن 0.

يمكنك أيضا إخفاء DIV Inner إذا كانت الصفيف== خطأ.

http://plnkr.co/edit/gist:3510140

href="http://plnkr.co/edit/gr5upnrdbrfuyq0ilhmg؟p=preview" rel="nofollow"> http://plnkr.co/edit/gr5upnrdbrfuyq0ilhmg؟p=preview / ص>

plunkr الخاص بك كان معقدا جدا ويصعب الاعشاب حتى أعيد إنشاء ما تريد استخدام كمان.الفكرة العامة وراء نهجي هي تصفية العناصر من الصفيف، وليس الصفيف الفرعي.وفقط القيام بالعناصر المصفاة عند تغيير النص.حتى هنا هي العلامة:

giveacodicetagpre.

وهنا الرمز:

giveacodicetagpre.

fiddle : http://jsfiddle.net/2hrws/

السبب في إنشاء صفيف جديد وعدم استخدام عامل تصفية فعلي لإزالة النتائج هو أن الزاوي لا يحب إنشاء صفائف ديناميكية أثناء الطيران في المرشحات.هذا لأنه لا يعني $$ Hashkey والأشياء فقط لا تصطف بشكل صحيح عند التحقق القذر.حصلت على فكرة كيفية القيام بما تحتاج إليه من هذا الموضوع في هذه المسألة:

لقد قمت بتعديل طفيف فقط الخاص بك list-widget.html, ، انظر في العمل: بلونكر

الفكرة بسيطة-استخدم نفس المرشح ل ng-show:

<div ng-show="group | filter:searchText">{{ key }}</div>

لن يكون الملصق مرئيا إلا إذا كانت هناك بعض العناصر غير المفلترة.

في بلدي على سبيل المثال أنا باستخدام searchText لتصفية لأنني لست على دراية كوفيسكريبت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top