如果用户输入不是数字,我必须恢复到旧数值。
从指令设置范围值不起作用。
http://jsfiddle.net/vfsHX/149/
app.directive('isNumber', function () {
return {
require: 'ngModel',
link: function (scope, element, attrs) {
scope.$watch(attrs.ngModel, function(newValue,oldValue) {
var arr = String(newValue).split("");
if (arr.length === 0) return;
if (arr.length === 1 && (arr[0] == '-' || arr[0] === '.' )) return;
if (arr.length === 2 && newValue === '-.') return;
if (isNaN(newValue)) {
console.log(oldValue);
scope[attrs.ngModel] = oldValue;
}
});
}
};
});
答案 0 :(得分:1)
使用$ setViewValue解决了问题
http://jsfiddle.net/vfsHX/158/
if(isNaN(newValue))
{
ngModel.$setViewValue(oldValue);
ngModel.$render();
}
答案 1 :(得分:0)
您的模型是嵌套形式,因此当您尝试使用scope[attrs.ngModel]
进行访问时,您将参考不存在的模型。如果你直接给出引用然后它的工作,而不是使用嵌套的JavaScript模型。看看这里的小提琴http://jsfiddle.net/ztUsc/1/