أنا أرسل ...
السلوك الحالي:
بعد التصفية والمصفوفة التي يتم تكرارها ولها توجيه مخصص في كل عنصر مكرر له نطاق معزول. لم يتم إعادة بدء التوجيه المخصص.
أفترض أن هذا سلوك متوقع ولكنه قد يكون محيرًا ويجب توضيح ما يمكن أن يفعله وضع track by $index
لتوجيهاتك المخصصة.
السلوك المتوقع / الجديد:
غير متوفر
الحد الأدنى من استنساخ المشكلة بالتعليمات:
إصدار AngularJS: 1.5.10
المتصفح: الكل
هل من شيء آخر:
هل يمكن جعل المستندات أكثر وضوحًا بين ما يفعله Angular عند استخدام track by
وبين استخدام $index
مع توجيهات مخصصة لن يعمل.
تحقق من إجابتي هنا لمعرفة تفاصيل المشكلة
https://stackoverflow.com/a/47310734/2536454
هل هناك احتمال أن تكون أكثر تحديدًا (أو تقديم عينة تكاثر)؟
يمكنك البدء من هذا المخطط لإعادة إنتاج المشكلة ، حيث يبدو أنها تعمل بشكل جيد بالنسبة لي.
أعتقد أن هذا هو السلوك المتوقع بالفعل. نقلا عن المستندات :
عند إعادة ترتيب العناصر ، يتم إعادة ترتيب القوالب الخاصة بكل منها في DOM.
لتقليل إنشاء عناصر DOM ، يستخدم ngRepeat وظيفة "لتتبع" جميع العناصر في المجموعة وعناصر DOM المقابلة لها. على سبيل المثال ، إذا تمت إضافة عنصر إلى المجموعة ، فإن ngRepeat سيعرف أن جميع العناصر الأخرى بها بالفعل عناصر DOM ، ولن يعيد تصييرها.
في مثل هذه الحالات (عند استخدام
track by $index
) ، سيتطابق عنصر DOM التاسع دائمًا مع العنصر n من المصفوفة ، لذلك لن يتم تحديث الارتباطات الموجودة على هذا العنصر حتى عندما يتغير العنصر المقابل ، مما يتسبب في الأساس في حدوث عرض للخروج من المزامنة مع البيانات الأساسية.
بتجميعها معًا ، ما يحدث هو أن التتبع بمقدار $index
، يخبر ngRepeat
أن العنصر الأول دائمًا هو نفسه (نظرًا لأنه يحتوي على نفس الفهرس). لا يعرف ngRepeat
أن البيانات الأساسية قد تغيرت ، لأنك تخبره أنه طالما أن الفهرس هو نفسه ، فإن العنصر هو نفسه (في الممارسة العملية ، نادرًا ما يكون التتبع بواسطة $index
مفيدًا) .
نظرًا لأن العناصر ngRepeat
هي أن العنصر هو نفسه ، فلن يعيد إنشاء DOM ، ولكنه يحتفظ بالعنصر الحالي (المرتبط بالنطاق الحالي وما إلى ذلك). وبالتالي فإن أي توجيهات تظهر على tempate لن يتم إعادة تجميعها (نظرًا لأن التجميع / الارتباط يحدث فقط عند "القضاء على" مثيل جديد).
لكنني أعترف أننا لا نقوم بعمل جيد للغاية في شرح ذلك في المستندات: ابتسامة:
@ michael-letcher ، هل أنت مهتم بإرسال علاقات عامة لتحسين المستندات؟
ماذا او ما
التعليق الأكثر فائدة
أعتقد أن هذا هو السلوك المتوقع بالفعل. نقلا عن المستندات :
بتجميعها معًا ، ما يحدث هو أن التتبع بمقدار
$index
، يخبرngRepeat
أن العنصر الأول دائمًا هو نفسه (نظرًا لأنه يحتوي على نفس الفهرس). لا يعرفngRepeat
أن البيانات الأساسية قد تغيرت ، لأنك تخبره أنه طالما أن الفهرس هو نفسه ، فإن العنصر هو نفسه (في الممارسة العملية ، نادرًا ما يكون التتبع بواسطة$index
مفيدًا) .نظرًا لأن العناصر
ngRepeat
هي أن العنصر هو نفسه ، فلن يعيد إنشاء DOM ، ولكنه يحتفظ بالعنصر الحالي (المرتبط بالنطاق الحالي وما إلى ذلك). وبالتالي فإن أي توجيهات تظهر على tempate لن يتم إعادة تجميعها (نظرًا لأن التجميع / الارتباط يحدث فقط عند "القضاء على" مثيل جديد).لكنني أعترف أننا لا نقوم بعمل جيد للغاية في شرح ذلك في المستندات: ابتسامة:
@ michael-letcher ، هل أنت مهتم بإرسال علاقات عامة لتحسين المستندات؟