【发布时间】:2016-06-07 02:27:02
【问题描述】:
我正在尝试创建仅在需要的情况下更新真实模型的指令。假设我只想在模糊时更新输入值。我添加了 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);
});
}
}
});
Plunker:https://plnkr.co/edit/qrR6MgW0c6kUx71Hp17A?p=preview
【问题讨论】:
-
正如我所说,我有一些情况需要更新过度事件的模型值,而不仅仅是模糊,也许我的问题标题不正确,抱歉 :)
标签: javascript angularjs