Vue - 指令绑定不适用于元素刷新
Vue - directive bind doesn't work on element refresh
我使用 vue.js 生成表单 - 所有字段都在 javascript 对象数组中,结构如下:
{
type: "input",
mask: "date",
default: "2018/04/14"
},
{
type: "input",
mask: "currency",
default: "0"
}
用户可以使用导航跳转到任何问题。当用户单击导航 link 时,我将我的 "currentQuestion" 对象更改为由用户选择 - 对象在 JS 中通过引用传递,因此如果用户修改某些内容,我的 "central" 数组中会有结果。没关系。
我还使用 inputmask 通过非常简单的指令来屏蔽输入字段:
import Vue from 'vue'
import Inputmask from 'inputmask'
Vue.directive('mask', {
bind (el, binding) {
if (binding.value) {
Inputmask(binding.value).mask(el)
}
}
})
它也工作正常...但并非总是如此。如果用户对日期掩码有疑问,则跳转到其他掩码的问题并返回 - 日期将不起作用。用户必须不戴面具去提问,然后返回,它会再次起作用。
调试后,我知道该元素已刷新,但 vue 未将正确的数据(来自 currentQuestion)绑定到输入:
methods: {
getInputMask () {
return this.currentQuestion.mask || null
},
和用法:
<input type="text"
:name="currentQuestion.identifier"
v-mask="getInputMask()"
v-model="currentQuestion.value"
@keyup="afterModifyInput"
>
结果,我不知道如何解决这个问题
你需要为每个元素设置一个 id 并使用 v-bind:key 像这样:
<input type="text"
v-bind:key="YOUR_ELEMENT.id"
v-mask="getInputMask()"
v-model="currentQuestion.value"
@keyup="afterModifyInput"
>
我想这是你的 ID
:name="currentQuestion.identifier"
好吧,v-bind 用于当您不知道要呈现的确切内容(如来自请求或 JSON 文件的属性)时。
我使用 vue.js 生成表单 - 所有字段都在 javascript 对象数组中,结构如下:
{
type: "input",
mask: "date",
default: "2018/04/14"
},
{
type: "input",
mask: "currency",
default: "0"
}
用户可以使用导航跳转到任何问题。当用户单击导航 link 时,我将我的 "currentQuestion" 对象更改为由用户选择 - 对象在 JS 中通过引用传递,因此如果用户修改某些内容,我的 "central" 数组中会有结果。没关系。
我还使用 inputmask 通过非常简单的指令来屏蔽输入字段:
import Vue from 'vue'
import Inputmask from 'inputmask'
Vue.directive('mask', {
bind (el, binding) {
if (binding.value) {
Inputmask(binding.value).mask(el)
}
}
})
它也工作正常...但并非总是如此。如果用户对日期掩码有疑问,则跳转到其他掩码的问题并返回 - 日期将不起作用。用户必须不戴面具去提问,然后返回,它会再次起作用。
调试后,我知道该元素已刷新,但 vue 未将正确的数据(来自 currentQuestion)绑定到输入:
methods: {
getInputMask () {
return this.currentQuestion.mask || null
},
和用法:
<input type="text"
:name="currentQuestion.identifier"
v-mask="getInputMask()"
v-model="currentQuestion.value"
@keyup="afterModifyInput"
>
结果,我不知道如何解决这个问题
你需要为每个元素设置一个 id 并使用 v-bind:key 像这样:
<input type="text"
v-bind:key="YOUR_ELEMENT.id"
v-mask="getInputMask()"
v-model="currentQuestion.value"
@keyup="afterModifyInput"
>
我想这是你的 ID
:name="currentQuestion.identifier"
好吧,v-bind 用于当您不知道要呈现的确切内容(如来自请求或 JSON 文件的属性)时。