当前位置:   article > 正文

vue的v-model以及封装自己的表单组件_vue v-model封装组件

vue v-model封装组件

v-model通常用于表单的双向数据绑定实质上是一个语法糖

  1. <template>
  2. <div>
  3. <input type="text" v-model="name"/>
  4. //原理
  5. <input type="text" :value="name" @input="name=$event.target.value"/>
  6. <div/>
  7. <template/>
  8. <script>
  9. export default {
  10. data:{
  11. return {
  12. name:'Jeck'
  13. }
  14. }
  15. }
  16. <script/>

封装简单的双向绑定的组件

  1. //组件myinput
  2. <template>
  3. <div>
  4. <div class="lable">{{lable}}<lable/>
  5. <input :type="type" :value="modelValue" @input="$emit('update:modelValue',evt.target.value)"/> //注意value必须绑定modelValue 事件名必须为update:modelValue
  6. <div/>
  7. <template/>
  8. <script>
  9. export default {
  10. props:["modelValue","lable","type"]
  11. }
  12. <script/>
  13. //使用
  14. <Myinput v-model="value"/>
  15. //原理 这里之所以可以用v-model来绑定是应为Vue在解析v-model时将转换为
  16. <Myinput :value="modelValue" @input="$emit('update:modelValue', $event.target.value)"/>

v-model的参数

默认情况下,v-model 在组件上都是使用 modelValue 作为 prop,并以 update:modelValue 作为对应的事件。可以通过给 v-model 指定一个参数来更改这些名字:

  1. //组件MyComponent
  2. <template>
  3. <div>
  4. <div class="lable">{{lable}}<lable/>
  5. <input :type="type" :value="title" @input="$emit('update:title',evt.target.value)"/> //注意value必须绑定title
  6. <div/>
  7. <template/>
  8. <script>
  9. export default {
  10. props:["title","lable","type"]
  11. }
  12. <script/>
  13. //使用
  14. <MyComponent v-model:title="bookTitle" />

在一个组件中可以有多个 v-model 绑定

  1. //组件MyComponent
  2. <template>
  3. <div>
  4. <div class="lable">{{lable}}<lable/>
  5. <input :type="type" :value="name1" @input="$emit('update:name1',evt.target.value)"/> //注意value必须绑定name1 事件名必须为update:name1
  6. <input :type="type" :value="name2" @input="$emit('update:name2',evt.target.value)"/> //注意value必须绑定name2 事件名必须为update:name2
  7. <div/>
  8. <template/>
  9. <script>
  10. export default {
  11. props:["name1","name2","lable","type"]
  12. }
  13. <script/>
  14. //使用
  15. <MyComponent v-model:name1="Jeck" v-model:name2="Ros" />

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/107820?site
推荐阅读
相关标签
  

闽ICP备14008679号