验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

vue2怎么封装input组件

阅读:267 来源:乙速云 作者:代码code

vue2怎么封装input组件

      vue2封装input组件

      重点

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

      	
          

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

      • :value 绑定了值

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

      代码示例:

      父组件

      
      
      

      子组件

      
      
      
      
      

      vue二次封装input的几种方式

      下面就是自己封装input 框实现的效果

      vue2怎么封装input组件

      在看如何封装之前,先来了解一下v-model是怎么回事。

      vue2怎么封装input组件

      其实说白了,v-model就是change和value的结合体。

      废话不多说,下面就来看一下在vue中如何封装自定义的input组件。

      封装原生input

      
      
      

      封装el-input

      
       
      
      
      

      上面的那种方式会在回显数据时有问题。解决办法就是:如果出现异步回显数据那么就需要用计算来作为中间值转换。

      
       
      
      
      

      VUE高级用法封装input

      这种方式更加简洁,并且不会出现第二种封装方式出现的bug。

      
      
      //正常的使用方式
      
      //不用v-model语法糖的方式
      

      这里核心用到了两个方法 attrs 和 listeners 其中 atters 可以把父组件标签上的所有自定义属性(不包括props,tyle,class)同步到当前元素中,listeners 可以把 f-input 标签上的所有方法同步到子组件中当前元素中。

      那么上面已经知道 v-model 就是 change 和 value 的语法糖,那在 f-input 上绑定 listeners 就可以读取到 f-input 的 v-model 的 change 事件,atters 可以读取到 f-input 的 v-model 的 value 值。

      $ 符号打不出来了,将就着看吧。如果还是不明白 atters和 listeners是怎么回事的可以看一下vue官网中的介绍。

      vue2怎么封装input组件

      看官网又出了一种封装的写法,感觉挺有意思,在这里记录一下。

      默认情况下,组件上的 v-model 使用 modelValue 作为 prop 和 update:modelValue 作为事件。我们可以通过向 v-model 传递参数来修改这些名称

      子组件将需要一个 firstName prop 和 lastName prop并发出 update:firstName 和 update:lastName要同步的事件

      var Component = {
              props: {
                  firstName: String,
                  lastName: String
              },
              emits: ['update:firstName', 'update:lastName'],
              //vue3可以支持多个根元素,所有这个地方不会有报错,vue2是会报错的。
              template: `
                      
      
                      
                  `
          }
      
      
      
    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>