项目中要求使用JqueryUI的datepicker来实现组件。
一开始考虑只需要加载一次,所以就在Vue生命周期函数中初期化datepicker。
mounted (){
let _that = this;
$(this.$el).datepicker({
dateFormat: 'yy-mm-dd',
minDate:'1926-12-25',
showOn:"click",
beforeShowDay: function (date) {
if (date.getDay() === 0 || date.getDay() === 6 ) {
return [false, '', ''];
} else {
return [true];
}
},
onSelect: function(dateText){
_that.setDataValue(val);
}
});
$.datepicker.setDefaults($.datepicker.regional["ja"]);
},
后来发现,由于项目是前后端分离的,有时候多次页面请求之后,datepicker的面板无法被呼出的情况。
考虑再三,决定把datepicker的初期化放到点击事件里。 以下是完整代码:
Vue.component('pure-date', {
template: `
<input v-if="dataValue.visible" type="text" :name="elId" v-model.lazy="dataValue.value"
autocomplete="off" @change="setDataValue(dataValue.value)" @click="dateShow" />
`,
props: {
formData: {
type: Object,
default() {
return {};
}
},
},
computed: {
dataValue(){
return this.formData[this.$attrs['id']];
}
},
methods: {
dateShow(){
let _that = this;
$(this.$el).datepicker({
dateFormat: 'yy-mm-dd',
minDate:'1926-12-25',
showOn:"click",
beforeShowDay: function (date) {
if (date.getDay() === 0 || date.getDay() === 6 ) {
return [false, '', ''];
} else {
return [true];
}
},
onSelect: function(dateText){
_that.setDataValue(val);
}
}).datepicker("show");
$.datepicker.setDefaults($.datepicker.regional["ja"]);
$(this.$el).unbind("keypress", $.datepicker._doKeyPress);
$(this.$el).unbind("keydown", $.datepicker._doKeyDown);
$(this.$el).unbind("doKeyUp", $.datepicker._doKeyUp);
},
setDataValue(){
.....
},
},
});
水平有限,忘大家不吝指正!