【发布时间】:2020-04-02 20:27:37
【问题描述】:
受几个示例的启发,我正在尝试编写一个自定义组件,用特定方法格式化它的值。
这是组件:
<template>
<input
type="text"
v-model="inputValue"
/>
</template>
<script type="text/javascript">
import {formatPhoneNumber} from '~/utils/string';
export default {
computed: {
inputValue: {
get() {
return formatPhoneNumber(this.value)
},
set(value) {
this.$emit('input', formatPhoneNumber(value))
}
}
},
}
</script>
我用的是Vuex,我在父组件中这样调用组件:
<PhoneInput :value="cellPhoneNumber" class="input" @input="addCellPhoneNumber" />
computed: {
cellPhoneNumber() {
return this.$store.state.identity.cellPhoneNumber;
},
},
methods: {
addCellPhoneNumber: function(phoneNumber) {
this.$store.commit('identity/addCellPhoneNumber', phoneNumber)
},
}
set 部分工作,它进入存储,但数据返回到组件,cellPhoneNumber 被调用,但不是 inputValue#get。
由于这可能与我在父组件中使用@input/:value 的事实有关,因此我尝试在它的子组件上也使用它:
<template>
<input
@input="formatValue"
type="text"
:value="formattedValue"
/>
</template>
<script type="text/javascript">
import {formatPhoneNumber} from '~/utils/string';
export default {
computed: {
formattedValue: function(){
return formatPhoneNumber(this.value)
},
},
methods: {
formatValue(e) {
this.$emit('input', formatPhoneNumber(e.target.value))
}
}
}
</script>
如果没有成功,同样的事情也会发生。
谁能告诉我怎么回事?
【问题讨论】:
-
您在期望
this.value的组件中缺少prop定义,因此它不是响应式的。 -
太棒了!谢谢,我认为
props是可选的,只是添加约束或警告而不是产生真正的行为影响。 -
我确实希望 Vue 的这方面更直观一点,或者至少比它提供的信息更多。
标签: vue.js vue-component vuex