Angular.js: يحتاج NgModel إلى طريقة لإعادة تشغيل سلسلة المنسق يدويًا

تم إنشاؤها على ٣١ يوليو ٢٠١٣  ·  3تعليقات  ·  مصدر: angular/angular.js

انظر إلى هذا الكمان:
http://jsfiddle.net/tPWBK/1/

لنفترض أن لديك توجيهًا لتحويل البيانات يتطلب "ngModel" ويضيف إلى سلاسل المنسق والمحلل. إذا كان التحويل يعتمد على بعض البيانات الديناميكية بخلاف $ modelValue أو $ viewValue ، فلا توجد طريقة لمراقبة تلك البيانات وإعادة تشغيل سلسلة المنسق.

انظر هذا المقتطف من https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js#L1081

$scope.$watch(function ngModelWatch() {
  var value = ngModelGet($scope);

  // if scope model value and ngModel value are out of sync
  if (ctrl.$modelValue !== value) {

    var formatters = ctrl.$formatters,
        idx = formatters.length;

    ctrl.$modelValue = value;
    while(idx--) {
      value = formatters[idx](value);
    }

    if (ctrl.$viewValue !== value) {
      ctrl.$viewValue = value;
      ctrl.$render();
    }
  }
});

هل يجب أن يكون كل شيء بداخل فحص (ctrl. $ modelValue! == value) دالة معروضة للجمهور على NgModelController؟

forms feature

التعليق الأكثر فائدة

+1 سيكون من الرائع حقًا الحصول على هذا. يؤدي عدم وجود المُنسِّقات والموزعين غير المتزامنين إلى جعل العمل مع البيانات غير المتزامنة أمرًا سيئًا للغاية. هذا من شأنه أن يساعد في منع بعض شروط السباق المقدمة من خلال التحقق المتزامن من مصدر بيانات غير متزامن.

كمرجع ، لقد فعلت ذلك بشكل مشابه جدًا لـ jpsimons :

scope.$watch('myAsyncCollection', () => {
  ngModel.$viewValue = ngModel.$formatters.reduceRight((prev, fn) => fn(prev)), ngModel.$modelValue)
  ngModel.$render()
})

ال 3 كومينتر

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

+1 سيكون من الرائع حقًا الحصول على هذا. يؤدي عدم وجود المُنسِّقات والموزعين غير المتزامنين إلى جعل العمل مع البيانات غير المتزامنة أمرًا سيئًا للغاية. هذا من شأنه أن يساعد في منع بعض شروط السباق المقدمة من خلال التحقق المتزامن من مصدر بيانات غير متزامن.

كمرجع ، لقد فعلت ذلك بشكل مشابه جدًا لـ jpsimons :

scope.$watch('myAsyncCollection', () => {
  ngModel.$viewValue = ngModel.$formatters.reduceRight((prev, fn) => fn(prev)), ngModel.$modelValue)
  ngModel.$render()
})

فقط إذا كان شخص ما يبحث في مقتطف الشفرة - فقد تم نقله:
https://github.com/angular/angular.js/blob/master/src/ng/directive/ngModel.js#L822

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