vue2封装input 组件(输入的双向绑定)

本文详细解析Vue.js中v-model的工作机制,通过实例展示了它如何同时完成值的绑定和变更监听。并介绍了如何在自定义组件中使用v-model,通过子组件的$emit('input', value)实现值的传递。示例包括父组件和子组件的代码实现,展示了一个封装的input组件效果。
摘要由CSDN通过智能技术生成

重点

首先我们要明白 vue中v-modle 的对于input 做了什么

	<input type="text" v-model="username">
    <input type="text" :value="username" @input="username = $event.target.value">

以上的两行代码,所呈现的效果是一样的。也就是说: v-model=“username” 在input中做了两件事情。

  • :value 绑定了值
  • @input=“username = $event.target.value” 监听了值的改变

代码示例:

父组件

<template>
  <div id="app">
    <lj-input placeholder="请输入" v-model="username"></lj-input>
    <div>{{username}}</div>
  </div>
</template>

<script>
import ljInput from './components/inputCom/LjInput.vue'
export default {
  name: 'App',
  components: {
    ljInput
  },
  data(){
    return{
      username:'',
    }
  },
  methods: {
  }
}
</script>

子组件

<template>
  <div class="lj-input">
    <input :class="{'is-disabled':disabled}"  
    :placeholder="placeholder" 
    :type="type" 
    :disabled ='disabled'
    :value="value"
    @input="handleInput"
    >
  </div>
</template>

<script>
export default {
  name:'ljInput',
  props: {
    placeholder:{
      type:String,
      default:'' 
    },
    type:{
      type:String,
      default:''
    },
    disabled:{
      type:Boolean,
      default:false
    },
    value:{
      type:String,
      default:''
    }
  },
  methods:{
    handleInput(e){
   	 // 这句代码是关键
      this.$emit('input',e.target.value) 
    }
  }
}
</script>

<style>
  .is-disabled{
      cursor: not-allowed;
  }
</style>

下面就是自己封装input 框实现的效果
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过自定义组件的 props 和 events 实现封装双向绑定组件。以下是一个简单的示例: ```html <template> <div> <label>{{ label }}</label> <input type="text" :value="value" @input="$emit('input', $event.target.value)"> </div> </template> <script> export default { props: { value: { type: String, default: '' }, label: { type: String, default: '' } } } </script> ``` 在上面的代码中,我们定义了一个包含输入框和标签的自定义组件。该组件接受两个 props:value 和 label。value 表示输入框的值,label 表示标签的文本。在组件内部,我们使用 v-bind 指令将 value 绑定到输入框的 value 属性上,使用 v-on 指令监听输入框的 input 事件,并使用 $emit 方法触发一个名为 input 的自定义事件,并将输入框的值作为参数传递给父组件。 在父组件中,我们可以像使用普通的 input 元素一样使用我们自定义的双向绑定组件: ```html <template> <div> <my-input v-model="name" label="姓名"></my-input> <p>您输入的姓名是:{{ name }}</p> </div> </template> <script> import MyInput from './MyInput.vue' export default { components: { MyInput }, data () { return { name: '' } } } </script> ``` 在上面的代码中,我们使用 v-model 指令将父组件的 name 数据属性与 MyInput 组件value 属性进行双向绑定。这样,当用户在 MyInput 组件输入姓名时,父组件的 name 数据属性也会随之更新,从而实现了双向绑定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值