Angular.js: ngMessagesInclude المعالجة بعد إزالة الرسائل الأصلية من DOM

تم إنشاؤها على ٢٧ أغسطس ٢٠١٥  ·  3تعليقات  ·  مصدر: angular/angular.js

كما يوضح العنوان ، تتم معالجة ngMessagesInclude بعد إزالة الرسائل الأصلية من DOM. فشل لأن angular لا يمكن العثور على وحدة تحكم الأصل لربط الرسائل الداخلية. لا يحدث ذلك عندما تكون عناصر ngMessage مضمنة داخل عنصر ngMessages ، أو عندما يظل العنصر الأصل موجودًا على DOM.

لديك رسائل غير حكومية مثل هذه:

<div ng-if="myForm.$submitted" ng-messages="myForm.myName.$error">
  <div ng-messages-include="messages.html"></div>
</div>

يتم بدء الإرسال من خلال:

this.change = function(myForm) {
  var self = this;
  myForm.$setSubmitted();    // event A
  $scope.$applyAsync(function () {
    self.currentStep = 'step2.html';     // event B
  });
};

في الحدث (أ) ، يتم تنزيل messages.html . نظرًا لأنه يستخدم $templateRequest ، يتوقف الارتباط حتى يعود الخادم. في غضون ذلك ، يستمر الحدث (B) بإزالة ngMessages وأبنائه من DOM. في وقت لاحق ، يصل ngMessagesInclude المحتوى وستقوم الزاوية بتجميعه. ولكن في هذه المرحلة ، لا توجد طريقة لاسترداد وحدة تحكم ngMessages بعد الآن.

بلنكر: http://plnkr.co/edit/0GOOLERvfj7n9vDVEyZp؟p=preview

في معظم الأحيان ، سيحدث ذلك مع حالة ngIf .

تم اختباره مقابل الإصدار 1.4.4.

لقد وجدت طريقة لتجنب ذلك:

ng-if="myForm.$submitted && myForm.myName.$invalid" 

لحل ذلك في جانب المكون ، يمكن جعل require: '^^ngMessages' اختياريًا والتحقق من هذا الشرط أثناء الارتباط.

ngMessages low confusing bug

ال 3 كومينتر

يتمثل أحد الحلول السهلة في التحقق مما إذا كان النطاق قد تم إتلافه قبل تجميع / ربط HTML في ngMessagesInclude:

$templateRequest(src).then(function(html) {
    if (scope.$$destroyed) return;
    // ...
}

هذه هي الطريقة التي يتعامل بها ngInclude مع نفس السيناريو.

التعامل مع هذا بطريقة مماثلة لأن ngInclude يبدو معقولاً.
awerlang أو jpekkala ، هل أنت مهتم بتقديم العلاقات العامة؟

بالتأكيد. سأقدم PR في غضون يومين.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات