【问题标题】:Can't pass value prop to custom input component无法将值道具传递给自定义输入组件
【发布时间】:2021-09-11 13:27:58
【问题描述】:

我有一个通常运行良好的自定义输入组件。但是从昨天开始,我想在某些情况下从父组件传递一个值(即,如果为该字段找到 cookie,则使用 cookie 值预填充该字段)。

父组件(简化):

<custom-input
  v-model="userEmail"
  value="John Doe"
/>

但由于某种我无法理解的原因,value 道具不起作用。为什么不呢?

我的自定义输入组件(简化版):

<template>
  <input
    v-bind="$attrs"
    :value="value"
    @blur="handleBlur"
  >
</template>

<script>
export default {
  inheritAttrs: false,
  props: {
    value: {
      type: String,
      default: ''
    }
  },
  mounted () {
    console.log(this.value) // displays nothing, whereas it should display "John Doe"
  },
  methods: {
    handleBlur (e) {
      this.$emit('input', e.target.value)
    }
  }
}
</script>

【问题讨论】:

    标签: vue.js prop


    【解决方案1】:

    value prop 与发出的事件 input 一起使用来执行 v-model 工作,所以你应该给你的 prop 取另一个名字,比如 defaultValue 来避免这种冲突:

    <custom-input
      v-model="userEmail"
      defaultValue="John Doe"
    />
    

    <template>
      <input
        v-bind="$attrs"
        :value="value"
        @blur="emitValue($event.target.vaklue)"
      >
    </template>
    <script>
    export default {
      inheritAttrs: false,
      props: {
        value: {
          type: String,
          default: ''
        },
       defaultvalue: {
          type: String,
          default: ''
        },
      },
      mounted () {
        this.emitValue(this.defaultValue) 
      },
      methods: {
        emitValue(val) {
          this.$emit('input', val)
        }
      }
    }
    </script>
    

    【讨论】:

    • 谢谢!我如何将defaultValue 应用到该字段以便用户可以看到它?另外我还是不明白为什么我的代码不起作用,为什么value是空的?
    • 不客气,兄弟,正如我所说,value 道具在这种情况下是保留的,它与input 事件一起使用来做v-model 工作,应用它我想你可以试试this.$emit('input', defaultValue) 内装挂钩
    猜你喜欢
    • 2021-04-04
    • 2020-12-21
    • 2020-12-22
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    相关资源
    最近更新 更多