vue.js - Vue + Vuex:格式化输入数据
问题描述
受几个示例的启发,我正在尝试编写一个自定义组件,该组件使用特定方法格式化它的值。
这是组件:
<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>
没有成功,同样的事情也会发生。
有人可以告诉我出了什么问题吗?
解决方案
正如@ohgodwhy 在评论中提到的那样:
您在
prop
期望的组件中缺少定义this.value
,因此它不是反应性的。
推荐阅读
- c++ - 仅使用一个类定义重载模板化类模板参数
- android - 添加无法解决的sceneform 1.16时出错
- c# - WinForms (C#) 仅通过 Timer 每隔一个循环更新 PictureBoxes
- python - 白平衡和颜色转换
- android - 如何在没有谷歌地图 API 的情况下在我的应用程序中获取经度和纬度?
- cmake - CMake 函数“未在此范围内声明”错误
- php - 使用nodejs但不使用php下载多个文件的不一致
- javascript - 如何使用 Electron 的 Mac AppStore 集成从 InApp 购买中获取货币代码?
- javascript - 如何在 ruby on rails 中更改自定义更改 time_field 输出步骤:30min?
- javascript - Javascript隐藏一个div并显示另一个不工作