gpt4 book ai didi

angularjs - Angular 1.3.0 和输入 [type=string]

转载 作者:行者123 更新时间:2023-12-03 06:44:33 26 4
gpt4 key购买 nike

我们最近更新了我们的应用程序以使用最新的 Angular 版本,从 1.3.0 之前的版本更新到 1.5.0。显然我们现在遇到了 1.3.0 中引入的重大更改:

https://github.com/angular/angular.js/issues/9218

我们有一个自定义指令,使我们能够使用 pikaday 日期选择器:

module.directive('pikaday', function () {
return {
require: 'ngModel',
link: function preLink(scope, element, attrs, controller) {
var $element = $(element),
momentFormat = 'DD/MM/YYYY',
year = new Date().getFullYear();

// init datepicker
var picker = new Pikaday(
{
field: document.getElementById(attrs.id),
firstDay: 1,
format: momentFormat,
minDate: new Date((year - 1) + '-01-01'),
maxDate: new Date((year + 1) + '-12-31'),
yearRange: [year - 1, year + 1],
onSelect: function (date) {
controller.$setViewValue(date);
},
defaultDate: scope.$eval(attrs.ngModel), // require: 'ngModel'
setDefaultDate: true
});

// format model values to view
controller.$formatters.unshift(function (modelValue) {
var formatted = (modelValue)
? moment(modelValue).format(momentFormat)
: modelValue;
return formatted;
});

// parse view values to model
controller.$parsers.unshift(function (viewValue) {
if (viewValue instanceof Date) {
return viewValue;
}
else {
return moment(viewValue, momentFormat).toDate();
}
});
}
};
})

这曾经工作正常,但现在在绑定(bind)具有此控件的表单后,我的范围值突然从 Date 对象更改为字符串(从未与控件交互!)有趣的是,这种情况发生时没有曾经被调用的格式化程序或解析器。因此,看起来 Angular 只是决定更改范围值,只是因为它被绑定(bind)到“文本”类型的输入,即使输入中的值从未被触及。

我不想使用 input[type=text] 因为我不希望浏览器强制自己处理日期。

如果我的格式化程序/解析器被调用,我会知道如何解决这个问题,但这让我感到困惑。

我可以只在一个范围内显示一个日期,并有一个按钮,用户可以单击来生成 pikaday 插件,但我希望行为保持原样......

最佳答案

您是否在 https://github.com/angular-ui/bootstrap/issues/2659 中看到过此解决方法? ?

All you have to do is add a directive:

directive('datepickerPopup', function (){
return {
restrict: 'EAC',
require: 'ngModel',
link: function(scope, element, attr, controller) {
//remove the default formatter from the input directive to prevent conflict
controller.$formatters.shift();
}
}
})

解决方法删除了 1.3.0 版本引入的不太好的工作格式化程序,从而解决了该问题。

这个修复应该能够成功,因为它在 github 线程中得到了广泛的感谢。

关于angularjs - Angular 1.3.0 和输入 [type=string],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36032876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com