javascript - Vue3 在子组件中使用 v-model
问题描述
我刚刚发现在 Vue3 中,v-model
没有响应式/反应式地使用 child Component
。
此代码将更新username
数据
<template>
<div>
<input type="text" v-model="username" placeholder="Insert your username" />
<p>{{ username }}</p>
</div>
</template>
<script>
// Home.vue
export default {
name: 'Home',
data() {
return {
username: 'admin'
}
}
}
</script>
如果我在 中输入一些东西input
,username
数据也会改变。
但是,当我Component
像这个例子一样使用时:
<template>
<input type="text" :class="'input-text ' + additionalClass" :placeholder="placeholder" />
</template>
<script>
// InputText.vue
import { defineComponent } from "vue"
export default defineComponent({
name: 'InputText',
props: {
placeholder: {
type: String,
default: ''
},
additionalClass: {
type: String,
default: ''
}
}
})
</script>
然后我更新了我的代码以使用Component
.
注意:Component
注册成功。
<template>
<div>
<input-text v-model="username" :placeholder="`Insert your username`" />
<p>{{ username }}</p>
</div>
</template>
<script>
// Home.vue
export default {
name: 'Home',
data() {
return {
username: 'admin'
}
}
}
</script>
当我输入一些东西时,username
数据没有更新,与前一个不同。
是否有任何解决方案或至少参考我想要实现的目标?
解决方案
您不能期望v-model
为您隐式更新基础元素。换句话说,您仍然需要在组件本身内处理它并将其modelValue
作为道具公开以使其真正起作用。像这样的东西:
<template>
<input
type="text"
@input="onChanged"
:value="modelValue"
:class="'input-text ' + additionalClass"
:placeholder="placeholder" />
</template>
<script>
// InputText.vue
import { defineComponent } from "vue"
export default defineComponent({
name: 'InputText',
emits: ['update:modelValue'],
props: {
modelValue: String,
placeholder: {
type: String,
default: ''
},
additionalClass: {
type: String,
default: ''
}
},
setup(props, { emit }) {
function onChanged(e) {
emit('update:modelValue', e.currentTarget.value);
}
return {
onChanged
}
}
})
</script>
推荐阅读
- angular - 用于动态路由内部的参数
- debugging - 立即窗口 VIsual studio 调试 undefined
- javascript - 如何从 javascript 函数中返回变量以及 promise?
- javascript - 我想将 onclick 功能分配给这样的按钮,但它不起作用,为什么?
- javascript - WebSocket 聊天应用程序。从本地主机到我的域
- react-native - 如何解决这个 firebase 模块版本控制错误?
- reactjs - 将组件路由到 ReactJS 中的另一个组件后,如何取消渲染组件?
- java - 将 arraylist 拆分为单独的数组,其中包含来自导入数据的单个元素
- java - While 循环不会以用户的新输入循环回到起点
- python - 在 Numba 中使用 C 库