【发布时间】:2014-07-01 20:26:00
【问题描述】:
我有一个名为po-datepicker 的简单指令,它在屏幕上显示一个日期选择器,但允许用户手动输入日期:
<input type="text" ng-model="model" po-datepicker required />
这是指令:
myApp.directive('poDatepicker', function () {
return {
require: ['?^ngModel'],
restrict: 'A',
link: function ($scope, elem, attrs, ctrl) {
var ngModel = ctrl[0];
var picker = elem.datepicker();
picker.on('changeDate', function(e) {
ngModel.$setViewValue(e.date);
...
});
elem.parent().find('button').on('click', function() {
picker.datepicker('show');
});
var changeFn = function(e) {
// Here I have some logic that calls $setViewValue();
};
picker.on('hide', changeFn);
elem.on('keyup blur', changeFn);
}
};
});
这按预期工作,但是当我尝试在输入中键入一个值时,它会更新 ngModel,更改范围中的变量,如何防止 ngModel 在输入中被更改?
Here is a plunkr,试试手动写一个值,你就会明白我在说什么了。
【问题讨论】:
-
为什么不将文本输入与不同的模型对象相关联。然后在适当的时候,你可以将值提交给真实的模型对象。
-
如果我这样做,
required之类的验证将不起作用,因为它需要ngModel进行验证
标签: angularjs angularjs-directive