Angular.js: NgModel membutuhkan cara untuk menjalankan kembali rantai formatter secara manual

Dibuat pada 31 Jul 2013  ·  3Komentar  ·  Sumber: angular/angular.js

Lihat biola ini:
http://jsfiddle.net/tPWBK/1/

Katakanlah Anda memiliki arahan transformasi data yang memerlukan 'ngModel' dan ditambahkan ke rantai formatter dan parser. Jika transformasi bergantung pada beberapa data dinamis selain $modelValue atau $viewValue, tidak ada cara untuk memantau data tersebut dan menjalankan kembali rantai formatter.

Lihat kutipan ini dari 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();
    }
  }
});

Haruskah semua yang ada di dalam centang (ctrl.$modelValue !== value) menjadi fungsi yang diekspos secara publik di NgModelController?

forms feature

Komentar yang paling membantu

+1 akan sangat menyenangkan untuk memiliki ini. kurangnya formatter dan parser async membuat bekerja dengan data async cukup buruk. ini akan membantu mencegah beberapa kondisi balapan yang diperkenalkan oleh validasi sinkron terhadap sumber data asinkron.

untuk referensi, saya melakukannya sangat mirip dengan @jpsimons :

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

Semua 3 komentar

Yah, saya kira orang bisa menyalin blok itu ke direktif. Itu semua barang publik. Akan berguna untuk memiliki fungsi untuk melakukannya untuk Anda.

+1 akan sangat menyenangkan untuk memiliki ini. kurangnya formatter dan parser async membuat bekerja dengan data async cukup buruk. ini akan membantu mencegah beberapa kondisi balapan yang diperkenalkan oleh validasi sinkron terhadap sumber data asinkron.

untuk referensi, saya melakukannya sangat mirip dengan @jpsimons :

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

hanya jika seseorang mencari potongan kode - itu telah pindah:
https://github.com/angular/angular.js/blob/master/src/ng/directive/ngModel.js#L822

Apakah halaman ini membantu?
0 / 5 - 0 peringkat