• 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 }
      }
    })
  • 相关阅读:
    python经常使用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)
    axis2开发webservice之编写Axis2模块(Module)
    Android中的动画具体解释系列【2】——飞舞的蝴蝶
    湘潭邀请赛——Alice and Bob
    ZOJ 2859 二维线段树
    jsp导出身份证到excel时候格式不正确
    Android 自己定义View须要重写ondraw()等方法
    聚合类新闻client产品功能点详情分析
    vi下对齐代码的操作
    最新研发的基于Java的高速开发平台
  • 原文地址:https://www.cnblogs.com/ysla/p/14676713.html
Copyright © 2020-2023  润新知