Vue 组件获取和设置转换 imask.js
Vue component get and set conversion with imask.js
我正在尝试使用 iMask.js 将我的组件的 'yyyy-mm-dd' 更改为 'dd/mm/yyyy' 但是当我设置值时,我认为它是在 iMask 完成之前获取值.我认为使用 maskee.updateValue()
可以,但不知道如何从我的组件访问 maskee。
我也不确定是否应该使用指令来执行此操作。
Vue.component("inputx", {
template: `
<div>
<input v-mask="" v-model="comp_date"></input>
</div>
`,
props: {
value: { type: String }
},
computed: {
comp_date: {
get: function () {
return this.value.split("-").reverse().join("/");
},
set: function (val) {
const iso = val.split("/").reverse().join("-");
this.$emit("input", iso);
}
}
},
directives: {
mask: {
bind(el, binding) {
var maskee = IMask(el, {
mask: "00/00/0000",
overwrite: true,
});
}
}
}
});
var app = new Vue({
el: "#app",
data: {
date: "2020-12-30"
}
});
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
<script src="https://unpkg.com/imask"></script>
<div id="app">
<inputx v-model="date"></inputx>
Date: {{date}}
</div>
实现此目的的最简单方法是在 Vue 组件的挂载钩子上安装外部功能,而不是使用指令。
通过这种方式,您可以将 'maskee' 对象存储在组件的数据对象上,以便稍后从 setter 方法访问它。
在 setter 方法中,您可以按照提示调用 'updateValue' 方法。然后,您只需访问 'maskee' 对象的 '_value' 属性即可提取处理后的值。
这是一个工作示例:
Vue.component("inputx", {
template: `
<div>
<input ref="input" v-model="comp_date"></input>
</div>
`,
data: {
maskee: false,
},
props: {
value: { type: String },
},
computed: {
comp_date: {
get: function () {
return this.value.split("-").reverse().join("/");
},
set: function () {
this.maskee.updateValue()
const iso = this.maskee._value.split("/").reverse().join("-");
this.$emit("input", iso);
}
}
},
mounted(){
console.log('mounted');
const el = this.$refs.input;
this.maskee = IMask(el, {
mask: "00/00/0000",
overwrite: true,
});
console.log('maskee created');
}
});
var app = new Vue({
el: "#app",
data: {
date: "2020-12-30"
}
});
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
<script src="https://unpkg.com/imask"></script>
<div id="app">
<inputx v-model="date"></inputx>
Date: {{date}}
</div>
我正在尝试使用 iMask.js 将我的组件的 'yyyy-mm-dd' 更改为 'dd/mm/yyyy' 但是当我设置值时,我认为它是在 iMask 完成之前获取值.我认为使用 maskee.updateValue()
可以,但不知道如何从我的组件访问 maskee。
我也不确定是否应该使用指令来执行此操作。
Vue.component("inputx", {
template: `
<div>
<input v-mask="" v-model="comp_date"></input>
</div>
`,
props: {
value: { type: String }
},
computed: {
comp_date: {
get: function () {
return this.value.split("-").reverse().join("/");
},
set: function (val) {
const iso = val.split("/").reverse().join("-");
this.$emit("input", iso);
}
}
},
directives: {
mask: {
bind(el, binding) {
var maskee = IMask(el, {
mask: "00/00/0000",
overwrite: true,
});
}
}
}
});
var app = new Vue({
el: "#app",
data: {
date: "2020-12-30"
}
});
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
<script src="https://unpkg.com/imask"></script>
<div id="app">
<inputx v-model="date"></inputx>
Date: {{date}}
</div>
实现此目的的最简单方法是在 Vue 组件的挂载钩子上安装外部功能,而不是使用指令。
通过这种方式,您可以将 'maskee' 对象存储在组件的数据对象上,以便稍后从 setter 方法访问它。
在 setter 方法中,您可以按照提示调用 'updateValue' 方法。然后,您只需访问 'maskee' 对象的 '_value' 属性即可提取处理后的值。
这是一个工作示例:
Vue.component("inputx", {
template: `
<div>
<input ref="input" v-model="comp_date"></input>
</div>
`,
data: {
maskee: false,
},
props: {
value: { type: String },
},
computed: {
comp_date: {
get: function () {
return this.value.split("-").reverse().join("/");
},
set: function () {
this.maskee.updateValue()
const iso = this.maskee._value.split("/").reverse().join("-");
this.$emit("input", iso);
}
}
},
mounted(){
console.log('mounted');
const el = this.$refs.input;
this.maskee = IMask(el, {
mask: "00/00/0000",
overwrite: true,
});
console.log('maskee created');
}
});
var app = new Vue({
el: "#app",
data: {
date: "2020-12-30"
}
});
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
<script src="https://unpkg.com/imask"></script>
<div id="app">
<inputx v-model="date"></inputx>
Date: {{date}}
</div>