AngularJS阻止ngModel同步
我有一个名为AngularJS阻止ngModel同步,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我有一个名为po datepicker的简单指令,它在屏幕上显示日期选择器,但允许用户手动键入日期: <input type="text" ng-model="model" po-datepicker required /> 这正如预期的那样工作,但是当我尝试在输入中键入值时,它会更新ngModel,更改范围中的变量,如何防止在输入中更改ngModel ,尝试手动写入一个值,您就会明白我在说什么。只需在输入中添加“禁用” 事实上,经过一些研究,我找到了解决这个问题的方法 我在论坛和
po datepicker
的简单指令,它在屏幕上显示日期选择器,但允许用户手动键入日期:
<input type="text" ng-model="model" po-datepicker required />
这正如预期的那样工作,但是当我尝试在输入中键入值时,它会更新ngModel,更改范围中的变量,如何防止在输入中更改ngModel
,尝试手动写入一个值,您就会明白我在说什么。只需在输入中添加“禁用”
事实上,经过一些研究,我找到了解决这个问题的方法 我在论坛和问题中发现,我需要解开元素事件的绑定,如下所示:
elem.unbind('input').unbind('keydown').unbind('change');
但这一解决方案并没有如预期的那样奏效
问题是我目前正在使用Angular 1.2.x,我发现您还需要为该指令设置一些优先级,例如:
return {
require: ['?^ngModel'],
priority: 1,
...
}
在这种情况下需要优先级:1
,因为某些内部Angular.js指令具有优先级
设置了正确的优先级。用户也需要手动设置值的选项,这就是问题所在。这样的解决方案怎么样?为什么不将文本输入与其他模型对象关联起来呢。然后在适当的时候,您可以将值提交给真实的模型对象。如果我这样做,那么像
required
这样的验证将不起作用,因为它需要ngModel
来验证
elem.unbind('input').unbind('keydown').unbind('change');
return {
require: ['?^ngModel'],
priority: 1,
...
}