[英]angular directive ngModel change on blur
我正在嘗試創建僅在需要的情況下更新實際模型的指令。 假設我只想在模糊時更新輸入值。 我添加了canChange變量來檢查是否可以更新模型值,並且在模糊時將此變量設置為true。 我還想運行名為myChangeFn的自定義viewValue轉換。 我不知道為什么ctrl。$ setViewValue(ctrl。$ viewValue); 如果添加一些文本並模糊輸入,則不會觸發我的解析器。 我知道我可以使用ngModelOptions,但就我而言,它將不起作用,因為在某些情況下,我想在其他事件上更改模型值。
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);
});
}
}
});
柱塞: https ://plnkr.co/edit/qrR6MgW0c6kUx71Hp17A ? p = preview
您可能希望將模型作為屬性綁定到指令:
// JavaScript
scope: {
vm : '='
},
// HTML
<input ng-model="time" change-on-blur vm="time" />
現在,您可以訪問模型並在scope.vm
指令中scope.vm
。
我知道這不是您要尋找的解決方案,但它可能會使您找到正確的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.