valor obtener ngmodeloptions con change javascript angularjs angularjs-directive angular-ngmodel html-input

javascript - obtener - ¿Cómo volver a ejecutar manualmente la cadena de formateadores en la directiva angularjs con ngModel?



ngmodeloptions (1)

actualmente no hay una API directa para llamar a la cadena interna del formateador. hay una solicitud de función github para esto. como solución alternativa, puedes copiar el código interno:

function runFormatters(ctrl){ // this function is a copy of the internal formatter running code. // https://github.com/angular/angular.js/issues/3407#issue-17469647 var modelValue = ctrl.$modelValue; var formatters = ctrl.$formatters; var idx = formatters.length; var viewValue = modelValue; while (idx--) { viewValue = formatters[idx](viewValue); } if (ctrl.$viewValue !== viewValue) { ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue; ctrl.$render(); ctrl.$$runValidators(modelValue, viewValue, angular.noop); } }

este Plunker demuestra el uso en combinación con un reloj para parámetros adicionales:

// deepwatch all listed attributes scope.$watch( function(){ return [scope.extraThingToWatchFor, scope.someOther]; }, function() { console.log("/t runformatters()"); runFormatters(); }, true );

este es un segundo Plunker para demostrar el deepwatch en ngModel

// deepwatch ngModel scope.$watch( function(){ return ngModelCtrl.$modelValue; }, function(newData) { runFormatters(ngModelCtrl); }, true );

Angular.js ngModel tiene la capacidad de declarar una cadena de analizadores y formateadores . Se pueden encontrar más detalles en la gran respuesta a ''¿Cómo hacer un filtrado bidireccional en angular.js?''

ahora la cadena del formateador solo se ejecutará si el ngModel se actualizará. así que si tiene un segundo parámetro de entrada que afecta a viewValue (se utiliza en uno de los formateadores), esto no activará una actualización de la vista. similar en la medida en que encontré ngModel solo usa un simple $ watch, por lo que si su modelo es una colección / objeto, no se activará si se modifican los subelementos.

¿Cuál es la mejor manera de implementar un reloj profundo para ngModel -
o un reloj para un parámetro adicional que debería volver a ejecutar la cadena de formateador?

hay otras preguntas similares:
Angularjs: ¿cómo "volver a ejecutar" $ formateadores cuando se cambia alguna configuración?