Mira este violín:
http://jsfiddle.net/tPWBK/1/
Supongamos que tiene una directiva de transformación de datos que requiere 'ngModel' y se agrega a las cadenas del formateador y analizador. Si la transformación depende de algunos datos dinámicos distintos de $ modelValue o $ viewValue, no hay forma de vigilar esos datos y volver a ejecutar la cadena del formateador.
Vea este extracto de 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();
}
}
});
¿Debería todo lo que está dentro de la verificación (ctrl. $ ModelValue! == value) ser una función que se expone públicamente en NgModelController?
Bueno, supongo que uno podría simplemente copiar ese bloque en una directiva. Todo es cosa pública. Sin embargo, sería útil tener una función para hacerlo por usted.
+1 sería muy bueno tener esto. la falta de formateadores y analizadores asíncronos hace que trabajar con datos asíncronos sea bastante desagradable. esto ayudaría a prevenir algunas de las condiciones de carrera introducidas por la validación síncrona contra una fuente de datos asíncrona.
como referencia, lo hice de manera muy similar a @jpsimons :
scope.$watch('myAsyncCollection', () => {
ngModel.$viewValue = ngModel.$formatters.reduceRight((prev, fn) => fn(prev)), ngModel.$modelValue)
ngModel.$render()
})
solo si alguien está buscando el fragmento de código, se ha movido:
https://github.com/angular/angular.js/blob/master/src/ng/directive/ngModel.js#L822
Comentario más útil
+1 sería muy bueno tener esto. la falta de formateadores y analizadores asíncronos hace que trabajar con datos asíncronos sea bastante desagradable. esto ayudaría a prevenir algunas de las condiciones de carrera introducidas por la validación síncrona contra una fuente de datos asíncrona.
como referencia, lo hice de manera muy similar a @jpsimons :