Siehe diese Geige:
http://jsfiddle.net/tPWBK/1/
Angenommen, Sie haben eine Datentransformationsdirektive, die 'ngModel' erfordert und zu den Formatierer- und Parserketten hinzugefügt wird. Wenn die Transformation von anderen dynamischen Daten als $modelValue oder $viewValue abhängt, gibt es keine Möglichkeit, diese Daten zu überwachen und die Formatierungskette erneut auszuführen.
Siehe diesen Auszug aus 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();
}
}
});
Sollte alles in der Prüfung (ctrl.$modelValue !== value) eine Funktion sein, die öffentlich auf NgModelController verfügbar gemacht wird?
Nun, ich denke, man könnte diesen Block einfach in eine Direktive kopieren. Es ist alles öffentliches Zeug. Wäre praktisch, eine Funktion zu haben, die dies für Sie erledigt.
+1 wäre wirklich schön, das zu haben. das Fehlen asynchroner Formatierer und Parser macht die Arbeit mit asynchronen Daten ziemlich unangenehm. Dies würde dazu beitragen, einige der Racebedingungen zu verhindern, die durch die synchrone Validierung mit einer asynchronen Datenquelle eingeführt werden.
Als Referenz habe ich es sehr ähnlich wie @jpsimons gemacht :
scope.$watch('myAsyncCollection', () => {
ngModel.$viewValue = ngModel.$formatters.reduceRight((prev, fn) => fn(prev)), ngModel.$modelValue)
ngModel.$render()
})
nur wenn jemand das Code-Snippet durchsucht - es hat sich verschoben:
https://github.com/angular/angular.js/blob/master/src/ng/directive/ngModel.js#L822
Hilfreichster Kommentar
+1 wäre wirklich schön, das zu haben. das Fehlen asynchroner Formatierer und Parser macht die Arbeit mit asynchronen Daten ziemlich unangenehm. Dies würde dazu beitragen, einige der Racebedingungen zu verhindern, die durch die synchrone Validierung mit einer asynchronen Datenquelle eingeführt werden.
Als Referenz habe ich es sehr ähnlich wie @jpsimons gemacht :