【发布时间】:2015-12-09 15:49:55
【问题描述】:
我想在自定义输入指令中使用 ngPattern。为了玩耍,我首先创建了以下指令:
myApp.directive('myInput', [function() {
return{
restrict: 'A',
replace: true,
require: 'ngModel',
scope: true,
template:
'<div>' +
' <input type="text" ng-model="val" ng-change="updateValue()" ng-pattern="/^-?(?:\d+|\d*\.(\d+)?)$/i">' +
'</div>',
link: function(scope, element, attrs, ngModelCtrl){
scope.updateValue = function(){
ngModelCtrl.$setViewValue(scope.val);
}
ngModelCtrl.$render = function () {
scope.val = ngModelCtrl.$viewValue;
};
}
};
}]);
我在调试器中看到scope.val 的值始终未定义,因此调用$setValue 无效。我试图删除 ng-pattern 属性,但更新也不起作用。
这里有什么问题? plunkr 可以在 here 找到,我绑定到模型而不是原始对象!
更新
似乎在scope.updateValue 中调用ngModelCtrl.$setViewValue(scope.val) 有一个奇怪的结果。如果有这样的模型:
scope.model = {
'testValue' : 12
};
然后我绑定到"model.testValue"(如plunkr)然后模型在ngModelCtrl.$setViewValue(scope.val) 执行后变成一个空对象{}。在普通输入字段中再次设置该值会将scope.model 变量重置为一个健全的对象。对我来说这毫无意义。知道为什么会这样吗?
【问题讨论】:
标签: javascript angularjs angularjs-directive