javascript - 从子组件向父组件发出值
问题描述
在我的 Nuxt.js 应用程序中,我尝试从子组件向父组件发出一个值。
父组件是:pages/index.vue:
<template>
<div>
<custom-input v-model="value" />
<v-btn @click="showValue">
Ok
</v-btn>
</div>
</template>
<script>
import CustomInput from '@/components/CustomInput.vue'
export default {
components: { CustomInput },
data () {
return {
value: 'hello'
}
},
watch: {
value (val) {
console.log('value' + val)
}
},
methods: {
showValue () {
console.log('value is: ' + this.value)
}
}
}
</script>
孩子是:component/CustomInput.vue:
<template>
<v-text-field
v-bind:value="value"
v-on:input="$emit('input', value)"
/>
</template>
<script>
export default {
name: 'CustomInput',
props: {
value: {
type: String,
required: true
}
},
watch: {
value () {
this.$emit('input', this.value)
}
}
}
</script>
当我单击按钮确定时,我没有得到更新的值。我错过了什么?
我按照官方文档here
相关的简单演示托管在 Github 上。
解决方案
这一行是错误的:
v-on:input="$emit('input', value)"
这是发出旧值。
它应该是:
v-on:input="$emit('input', $event)"
这将发出新值。
或者,您可以使用:
v-on:input="value => $emit('input', value)"
或者将其移到methods
.
推荐阅读
- postgresql - PostgreSQL for Debian vs Redhat (Centos)
- azure - 使用警告在 Terraform for Azure 中隐藏一个秘密
- c# - 拦截键盘按键进入 docker 容器
- node.js - Node.js (node:12276) [SEQUELIZE0004] DeprecationWarning
- aws-lambda - 无法为多个环境创建 aws sqs 队列?
- sharepoint - 在 Sharepoint 2013 中隐藏特定用户的“站点设置”
- c - 编写一个忽略操作顺序的 C 程序?
- python - 兼容 Keras 和 TensorFlow 版本
- r - 循环通过组合 R 中的不同列来创建新的数据组(投资组合分析)
- reactjs - 无法读取未定义的属性“历史”(React Router 5 的 useHistory 挂钩)