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,
    ...
}