• vue3中v-model的使用


    在vue2中v-model使用的还是挺多的,不过呢,这个指令一般是用在了输入框中,并且这个指令其实就是个语法糖
    <input type="text" />data </input>
    其实这个就是语法糖,真实的写法是
    <input type="text" />data</input>

    看到了吗,其实这个就和我们普通的定义组件上的数据,然后获取数据其实是一样的,感觉比较高级,很多弹窗里面会这么来写,

    之前对这边官方描述理解的不深,感觉没啥用,现在有点感觉了。

    现在vue3中,这里写法改了。

    看下面的代码,其实就是把之前的value改成了modelValue,把接收的input事件改成了update:modelValue,并且呢,考虑到modelValue意义不是很明确,可以使用v-model:title='title'这种方式来明确具体的字段名,这样子,在子组件里面就可以直接使用title这个字段了。

    父组件
    
    <VmodalTest v-model:show="show" v-show="show"></VmodalTest>
    子组件
    
    <template>
      <div class="vmodal-test">
        <p>vmodal test{{show}}</p>
        <button @click="$emit('update:show',false)">按钮啊</button>
      </div>
    </template>
    
    <script>
    export default {
      name: 'VmodalTest',
      props: {
        show: {
          type: Boolean
        }
      }
    }
    </script>
    
    <style scoped>
    
    </style>

    下面有一篇文章写的很详细,我也是看了这篇文章才感觉看懂了。

    https://blog.csdn.net/weixin_34242698/article/details/113077881

    文档里面还有多各v-model的,这就跟多个属性一个意思,贴一下官放文档里面的例子

    <user-name
      v-model:first-name="firstName"
      v-model:last-name="lastName"
    ></user-name>
    
    const app = Vue.createApp({})
    
    app.component('user-name', {
      props: {
        firstName: String,
        lastName: String
      },
      template: `
        <input 
          type="text"
          :value="firstName"
          @input="$emit('update:firstName', $event.target.value)">
    
        <input
          type="text"
          :value="lastName"
          @input="$emit('update:lastName', $event.target.value)">
      `
    })

    v-model除了参数还有修饰符,之前有trim,number之类的系统自带的,现在可以自定义了,基本写法就是v-model.trim='xxx'

    现在如果加上参数的话,就这么写,v-model:title.catimize='data'

    然后子组件里面呢,在props里面有了一个modelModifiers的对象,用来接收这些自定义的修饰符,

    有参数的话,名字就边了,叫'arg'+modifiers了

    举个官方例子把:

    看到没有,变成fooModifiers了

    <my-component v-model:foo.capitalize="bar"></my-component>
    app.component('my-component', {
      props: ['foo', 'fooModifiers'],
      template: `
        <input type="text" 
          :value="foo"
          @input="$emit('update:foo', $event.target.value)">
      `,
      created() {
        console.log(this.fooModifiers) // { capitalize: true }
      }
    })
  • 相关阅读:
    高性能反射初体验2
    高性能反射初体验1
    HTML解析原理
    QQ邮箱漂流瓶的"变化"~~
    javascript跟随滚动条滚动,onscroll事件的学习
    认识一下window.location.hash
    IE中替换a标签href属性的一个bug
    用css Sprites的时候IE6的一个小bug
    css中如何引入“非常” 字体
    [重温经典]ie6 不支持position:fix的解决方案
  • 原文地址:https://www.cnblogs.com/ysla/p/14676713.html
Copyright © 2020-2023  润新知