我有一個簡單的指令稱爲po-datepicker
,它在屏幕上顯示一個datepicker,但允許用戶鍵入手動日期:AngularJS防止ngModel同步
<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'來驗證 –