【发布时间】:2018-07-18 18:51:40
【问题描述】:
我正在尝试为输入元素创建指令。当输入一个数字时,我想通过添加像“12”->“0012”这样的零来更新模糊事件的输入值。我有一个传递给指令的参数来指定结果数字的长度,例如,如果数字的长度是 6 并且用户输入 123 结果是 000123
我创建了一个指令,但是在模糊事件之后,渲染视图可以工作,但它不会改变 ng-model 值
app.directive('addZeros', function() {
return {
restrict: 'A',
scope: {
addZeros: '=addZeros'
},
require: '?ngModel',
link: function(scope, element, attrs, modelCtrl) {
var addZeroOK = false;
modelCtrl.$parsers.push(function(inputValue) {
var num = parseInt(inputValue, 10);
num = '' + num;
var clean = num.replace(/[^0-9]/g, '');
if (inputValue.length <= scope.addZeros) {
scope.addZeros = parseInt(scope.addZeros, 10);
if (isNaN(clean) || isNaN(scope.addZeros)) {
return inputValue;
}
element.bind('blur', function(event) {
if (clean.length > 0) {
addZeroOK = true;
while (clean.length < scope.addZeros) {
clean = '0' + clean;
}
}
scope.$apply(function() {
modelCtrl.$setViewValue(clean);
modelCtrl.$render();
return clean;
})
});
if (addZeroOK == false) {
modelCtrl.$setViewValue(clean);
modelCtrl.$render();
return clean;
}
} else {
var str = inputValue.slice(0, -1);
modelCtrl.$setViewValue(str);
modelCtrl.$render();
return str;
}
});
}
};
});
【问题讨论】:
-
请检查此链接,看起来问题是当您输入 type="number" 时,尝试将其更改为带有模式的文本。希望这会告诉您方法)link跨度>
-
看起来这个人也有同样的问题,请检查,他的解决方案link
-
谢谢@Beny,但我的问题是在我的 ng-model 中获取值,添加零工作并且在输入中我有正确的值,但 ng- modal 为空,您可以查看链接plnkr.co/edit/1ON1DtKZ6qjmT1i2U5pz?p=preview 了解更多详情
-
正确,我错过了。
标签: angularjs angularjs-directive angularjs-ng-model