Vue JS:自定义输入清除值

时间:2019-12-03 18:21:01

标签: javascript vue.js

我创建了一个自定义输入

<template>
    <div class="content">
        <p>
            <slot></slot>
        </p>
        <input v-model="content" class="textbox" :type="type" @input="handleInput">
    </div>
</template>

<script>
export default {
  name: 'vTextbox',
  props:{
      type: String,
  }, 
  data: function(){
      return {
          content: ""
      }
  },
  methods:{
        handleInput(){
          this.$emit('input', this.content)
      }
  }
}
</script>

父组件调用自定义输入组件以获取其内容,例如:

<vTextbox v-model="email" type="email">Email</vTextbox>
export default {
  ...
  data: function(){
      return{
          email: "",
      }
  },
  methods:{
    Clear: function(){
        this.email = ""
    }
  }
}

我想在调用Clear函数时清除自定义输入组件的值/内容。我尝试设置this.email =“”,但不起作用。

1 个答案:

答案 0 :(得分:1)

问题是您没有在自定义输入中收到该值。当父组件中有v-model时,为了使v-model发挥作用,该组件需要实现value道具并注意change

这是可能的样子

<template>
    <div class="content">
        <p>
            <slot></slot>
        </p>
        <input v-model="content" class="textbox" :type="type" @input="handleInput">
    </div>
</template>

<script>
export default {
  name: 'vTextbox',
  props:{
      value: String, // added value prop
      type: String,
  }, 
  data: function(){
      return {
          content: ""
      }
  },
  watch:{
    value(val) {
      this.content = val; // added watch to override internal value, this will allow clear to work
    }
  },
  methods:{
        handleInput(){
          this.$emit('input', this.content)
      }
  }
}
</script>