从子组件向父组件发送值

时间:2019-12-17 08:05:53

标签: javascript vue.js nuxt.js nuxt

在我的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>

当我单击确定按钮时,我没有得到更新的值。我想念什么?

enter image description here 屏幕截图显示新值不是通过控制台单击按钮登录,而是显示旧值。

我遵循了官方文档here

相关的简单demo托管在Github上。

1 个答案:

答案 0 :(得分:1)

此行是错误的:

v-on:input="$emit('input', value)"

这是在释放旧值。

应该是:

v-on:input="$emit('input', $event)"

这将发出新值。

或者,您可以使用:

v-on:input="value => $emit('input', value)"

或将其移至methods中的方法。