Я пытаюсь создать директиву, которая обновляет реальную модель только на необходимых случаях. Предположим, я хочу обновить значение ввода только при размытии. Я добавил переменную canChange, чтобы проверить, могу ли я обновить значение модели, и я установил эту переменную в true при размытии. Я также хочу запустить мое собственное преобразование viewValue с именем myChangeFn. Я не знаю, почему ctrl. $ SetViewValue (ctrl. $ ViewValue); не запускает мой парсер, если я добавляю текст и размытие ввода. Я знаю, что могу использовать ngModelOptions, но в моем случае это не сработает, потому что где-то, когда я хочу изменить значение модели на другие события.угловая директива ngModel change on blur
var app = angular.module('plunker', []);
app.controller('MainCtrl', function ($scope) {
}).directive('changeOnBlur', function() {
return {
restrict: 'A',
require: 'ngModel',
scope: {},
link: function (scope, element, attrs, ctrl) {
var canChange = false;
ctrl.$parsers.push(function(value){
var val = canChange ? myChangeFn(value) : ctrl.$modelValue;
canChange = false;
return val;
});
function myChangeFn(value) {
return value + 'my custom data';
}
element.on('blur', function() {
canChange = true;
ctrl.$setViewValue(ctrl.$viewValue);
});
}
}
});
Plunker: https://plnkr.co/edit/qrR6MgW0c6kUx71Hp17A?p=preview
ng-model-options. – ryanyuyu
Как я уже сказал, у меня есть случаи, когда мне нужно обновить значение модели на событиях не только на размытие, возможно, мой вопрос загорается неправильно, извините :) –