角度指令范围[attrs.ngModel]不起作用

时间:2014-01-21 10:53:17

标签: angularjs angularjs-directive angularjs-scope

如果用户输入不是数字,我必须恢复到旧数值。

从指令设置范围值不起作用。

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;
            }
        });
    }
};
});

2 个答案:

答案 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/