首页 > 其他分享 >18 vue3之自动引入ref插件&深入使用v-model

18 vue3之自动引入ref插件&深入使用v-model

时间:2024-09-26 14:24:01浏览次数:11  
标签:插件 自定义 18 修饰符 update let vue3 model modelValue

自动引入插件后无需再引入ref等

使用自动引入插入无需在import { ref, reactive } from "vue"做这样的操作

npm i unplugin-auto-import - D

 vite配置

import AutoImport from 'unplugin-auto-import/vite' //使用vite版本
export default defineConfig({
  plugins: [vue(),VueJsx(),AutoImport({
    imports:['vue'],
    dts:"src/auto-import.d.ts"
  })]
}

配置完成之后使用ref reactive watch 等 无须import 导入 可以直接使用 

v-model

v-model使用场景

TIps 在Vue3 v-model 是破坏性更新的

v-model在组件里面也是很重要的

v-model 其实是一个语法糖 通过props 和 emit组合而成的

默认值的改变

prop:value -> modelValue;
事件:input -> update:modelValue
vue3中v-bind 的 .sync 修饰符和组件的 model 选项已移除
新增 支持多个v-model
新增 支持自定义 修饰符 Modifiers

单个v-model在自定义组件中使用场景

父组件


<template>
  <div class=""></div>
  <button @click="isShow = !isShow">开关</button>
  <div>isShow:{{ isShow }}</div>
  <hr />
  <!-- 内置修饰符 v-model.trim、自定义修饰符v-model:text.isSq  -->
  <com
    v-model="isShow"
  ></com>
</template>

<script setup lang="ts">
import { ref, reactive } from "vue";
import com from "./components/twenty.vue";
let isShow = ref<boolean>(true);
let textVal = ref<string>("你好");
</script>

<style lang="less" scoped></style>

子组件

<template>
  <div v-if="propsData.modelValue">
    <div class="box">
      <div>接受到的isShow:{{ propsData.modelValue }}</div>
      <button @click="clsoe">关闭</button>
    </div>
  </div>
</template>

<script setup lang="ts">
import {
  ref,
  reactive,
  defineProps,
  defineEmits,
} from "vue";
/*

v-model 其实是一个语法糖 通过props 和 emit组合而成的

1.默认值的改变
prop:value -> 默认参数是modelValue,当然也可以自定义v-model:isShow1="isShow;
事件:input -> update:modelValue;
v-bind 的 .sync 修饰符和组件的 model 选项已移除
新增 支持多个v-model
新增 支持自定义 修饰符 Modifiers
*/
// 注意点: 1.vue2中是value vue3中是modelValue

type Props = {
  modelValue: boolean; // v-model默认值 modelValue  };
};

let propsData = defineProps<Props>();
let emit = defineEmits([
  "update:modelValue",
  "update:text",
]); // update:modelValue与props中的modelValue保持一致
let clsoe = () => {
  emit("update:modelValue", false);
};
</script>

<style lang="less" scoped>
.box {
  width: 200px;
  height: 200px;
  border: 1px solid #ccc;
}
</style>

多个model在自定义组件中使用场景

自定义修饰符Modifiers

内置修饰符 v-model.trim、自定义修饰符v-model:text.isSq

添加到组件 v-model 的修饰符将通过 modelModifiers prop 提供给组件。在下面的示例中,我们创建了一个组件,其中包含默认为空对象的 modelModifiers prop

父组件

<template>
  <div class=""></div>
  <button @click="isShow = !isShow">开关</button>
  <div>isShow:{{ isShow }}</div>
  <div>textVal:{{ textVal }}</div>
  <hr />
  <!-- 内置修饰符 v-model.trim、自定义修饰符v-model:text.isSq  -->
  <com v-model:text.isSq="textVal" v-model="isShow"></com>
</template>

<script setup lang="ts">
import { ref, reactive } from "vue";
import com from "./components/twenty.vue";
let isShow = ref<boolean>(true);
let textVal = ref<string>("你好");
</script>

<style lang="less" scoped></style>

子组件

<template>
  <div v-if="propsData.modelValue">
    <div class="box">
      <div>接受到的isShow:{{ propsData.modelValue }}</div>
      <button @click="clsoe">关闭</button>
      内容:
      <input
        @change="change"
        :value="propsData.text"
        type="text"
      />
    </div>
  </div>
</template>

<script setup lang="ts">
import {
  ref,
  reactive,
  defineProps,
  defineEmits,
} from "vue";
/*

v-model 其实是一个语法糖 通过props 和 emit组合而成的

1.默认值的改变
prop:value -> 默认参数是modelValue,当然也可以自定义v-model:isShow1="isShow;
事件:input -> update:modelValue;
v-bind 的 .sync 修饰符和组件的 model 选项已移除
新增 支持多个v-model
新增 支持自定义 修饰符 Modifiers
*/
// 注意点: 1.vue2中是value vue3中是modelValue

type Props = {
  modelValue: boolean; // v-model默认值 modelValue
  // isShow1: boolean;
  text: string; // 自定义v-model
  textModifiers?: {
    // modelValueModifiers默认是这样写 我们这里是使用的自定义v-model
    isSq: boolean;
    // default: () => {
    // }
  };
};

let propsData = defineProps<Props>();
let emit = defineEmits([
  "update:modelValue",
  "update:text",
]); // update:modelValue与props中的modelValue保持一致
let clsoe = () => {
  emit("update:modelValue", false);
};
let change = (e: Event) => {
  // 第三方组件都是这样做v-model的
  // let target = e.target; //let target: EventTarget | null  已声明“target”,但无法读取其值。
  let target = e.target as HTMLInputElement;
  emit(
    "update:text",
    propsData?.textModifiers?.isBt
      ? target.value + "帅气"
      : target.value
  ); // 自定义了修饰符就+变态二字
};
</script>

<style lang="less" scoped>
.box {
  width: 200px;
  height: 200px;
  border: 1px solid #ccc;
}
</style>

19 vue3之定义自定义指令Directive&按钮鉴权-CSDN博客文章浏览阅读153次。directive-自定义指令(属于破坏性更新)Vue中有v-if,v-for,v-bind,v-show,v-model 等等一系列方便快捷的指令 今天一起来了解一下vue里提供的自定义指令Vue3指令的钩子函数created 元素初始化的时候beforeMount 指令绑定到元素后调用 只调用一次mounted 元素插入父级dom调用beforeUpdate 元素被更新之前调用update 这个周期方法被移除 改用updatedbeforeUnmount 在元素被移除前调用https://blog.csdn.net/qq_37550440/article/details/142525714?sharetype=blogdetail&sharerId=142525714&sharerefer=PC&sharesource=qq_37550440&spm=1011.2480.3001.8118

标签:插件,自定义,18,修饰符,update,let,vue3,model,modelValue
From: https://blog.csdn.net/qq_37550440/article/details/142522527

相关文章

  • WordPress LearnPress插件 SQL注入漏洞
     0x01阅读须知        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用......
  • 183天打造行业新标杆!BOE(京东方)国内首条第8.6代AMOLED生产线提前全面封顶
    2024年9月25日,BOE(京东方)投建的国内首条第8.6代AMOLED生产线全面封顶仪式在成都市高新区举行,该生产线从开工到封顶仅用183天,以科学、高效、高质的速度再树行业新标杆。这不仅是BOE(京东方)创新突破、打造新质生产力的又一重大举措,也是OLED领域的里程碑事件,极大推动OLED显示产业快速迈......
  • 工业 RJ 连接器:DRP10188321011 DRP10188321012 DRP10188400001 DRP10188400002 提供
    工业以太网连接器能够实现以太网和其他工业协议的物联网连接,覆盖了从企业/云到工厂车间中传感器/执行器的所有操作层面。工业RJ系列模块化以太网插头提供符合ANSI/TIA-568.2-D的CAT6A性能。它在长达100m的应用中支持千兆位以太网协议和10G链路。可现场端接的设计便于......
  • cPanel&WHM 的将插件转换为帐户工具
    cPanel主机帐户是可以管理多个域名。但在某些情况下,可能希望将附加域分离到单独的cPanel帐户中。在这篇文章中,我们将详细说明如何完成这一操作!具有最高权限的用户可以将附加域移至其自己的独立cPanel帐户。WHM界面首先,登录到您的WHM控制面板。在左侧菜单中选择“ConvertAddonDoma......
  • 18 基于51单片机的心率体温监测报警系统(包括程序、仿真、原理图、流程图)
    目录一、主要功能二、硬件资源三、程序编程四、实现现象一、主要功能基于51单片机ds18B20读取温度,设置初始心率65设置温度阈值38心率阈值60100如果超过阈值,蜂鸣器报警,led灯亮二、硬件资源基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。......
  • Vue3中如何响应式解构 props
    1、父组件<template><Children:count="count":info="info"/></template><scriptsetuplang="ts">import{ref,reactive}from"vue";importChildrenfrom"./Comp.vue";constcou......
  • django数字化时代的新能源汽车供应链优化与可视化-计算机毕业设计源码91188
    摘要本研究旨在探讨利用Django框架进行新能源汽车供应链优化与可视化的应用。随着数字化时代的到来,新能源汽车产业迅速发展,供应链管理变得至关重要。通过结合Django框架的强大功能,我们可以优化新能源汽车供应链的各个环节,实现供需匹配的精准管理,同时利用可视化技术展示供应链......
  • vue3中使用百度地图
    1、在入口的index.html中添加以下代码,更换成自己的key<scriptsrc="//api.map.baidu.com/api?type=webgl&v=1.0&ak=yourkey"></script>2、新增一个.d.ts文件,全局声明BMapGL变量declareconstBMapGL:any不然的话会报这种错误找不到名称“BMapGL”。3、增加地图......
  • 18 进制转换
    进制转换相关bin,将十进制转化成二进制num=13v1=bin(num)print(v1)oct,将十进制转换成八进制num=8v1=oct(num)print(v1)int,将其他进制转化成十进制#二进制转化成十进制v1='0b1101'result=int(v1,base=2)print(result)#八进制转化成十进制v1='0o11......
  • 使用 Vue3、TypeScript 和 Spring Boot 实现文件上传至 MinIO 和 OSS
    目录《使用Vue3、TypeScript和SpringBoot实现文件上传至MinIO和OSS》一、技术选型二、环境搭建三、前端实现四、后端实现五、代码解析在现代web应用开发中,文件上传是一个常见的需求。本文将介绍如何使用Vue3、TypeScript和SpringBoot实现文件上传功能,并......