首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vue中自定义输入字段中的双向绑定

vue中自定义输入字段中的双向绑定
EN

Stack Overflow用户
提问于 2022-08-20 01:25:02
回答 2查看 106关注 0票数 2

我在使用v-model vue指令进入自定义输入字段时遇到问题,以下是自定义输入组件和App.vue的代码。

这是我的自定义输入字段

Input.vue

代码语言:javascript
复制
<template>
    <label >{{label}}</label>
    <input v-model="bindTo" type='type'  required>
</template>

<script>
export default {
    props:['label','type','bindTo']
}
</script>

App.vue

代码语言:javascript
复制
<template>

    <!-- Email -->
        <Input type="email" label="Email" :bindTo="email"/>
        <p>Email : {{email}}</p>


</template>

<script>
import Input from "./Input.vue";

export default {
    components:{
        Input,
    },
data() {
    return {
        email:"",
        password:"",
        role:"developer",
        terms:false,
        tempSkill:"",
        skills:[],
        passwordError:"",
        emailError:"",
    }
},


</script>

在我的数据方法中,我无法访问电子邮件中的值。可能出什么事了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-20 08:45:04

仔细看完文档,我找到了解决问题的方法。

Input.vue

代码语言:javascript
复制
<template>
    <label >{{label}}</label>
    <input :value="modelValue" type='type' @input="$emit('update:modelValue',$event.target.value)"  required>
</template>

<script>
export default {
    props:['label','type','modelValue'],
    emits:['update:modelValue']
}
</script>

然后在App.vue

代码语言:javascript
复制
<template>

    <!-- Email -->
        <Input type="email" label="Email" v-model="email"/>
        <p>Email : {{email}}</p>


</template>

<script>
import Input from "./Input.vue";

export default {
    components:{
        Input,
    },
data() {
    return {
        email:"",
        password:"",
        role:"developer",
        terms:false,
        tempSkill:"",
        skills:[],
        passwordError:"",
        emailError:"",
    }
},


</script>

要了解更多细节,请访问文档,因为除了这种方法之外,还有其他方法可以使其工作,https://vuejs.org/guide/components/events.html

票数 0
EN

Stack Overflow用户

发布于 2022-08-20 06:44:01

在Vue.js中,您只需添加v-bind="$attrs"v-on="$listeners",就可以将所有内容从父组件转发到子组件。

Input.vue

代码语言:javascript
复制
<template>
    <label >{{label}}</label>
    <input v-bind="$attrs" v-on="$listeners">
</template>

<script>
  export default {
    props: ['label']
  }
</script>

App.vue

代码语言:javascript
复制
<template>

    <!-- Email -->
        <Input type="email" label="Email" v-model="email" required/>
        <p>Email : {{email}}</p>


</template>

<script>
  import Input from "./Input.vue";

  export default {
    components: {
      Input,
    },
    data() {
      return {
        email: "",
        password: "",
        role: "developer",
        terms: false,
        tempSkill: "",
        skills: [],
        passwordError: "",
        emailError: "",
      }
    },
</script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73423523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档