Vue 3 相对于 Vue2,模板和组件的一些变化

目录

  • 1,模板的变化
    • 1,v-model
      • vue2
      • vue3
    • 2,v-if 和 v-for
    • 3,key
      • v-for
      • v-if
    • 4,Fragment
  • 2,组件的变化
    • 1,Teleport
    • 2,异步组件

1,模板的变化

1,v-model

vue2

对组件使用双向绑定时,有2种方式

  1. v-model,默认会绑定属性 value 和事件 input
<ChildComponent :value="myTitle" @input="myTitle = $event" />
<!-- 简写为 -->
<ChildComponent v-model="myTitle" />
  1. async 修饰符
<ChildComponent :title="myTitle" @update:title="myTitle = $event" />
<!-- 简写为 -->
<ChildComponent :title.sync="myTitle" />

vue3

做了修改,

  1. v-model 绑定的属性 value --> modelValue,事件input --> update:modelValue
<ChildComponent :modelValue="myTitle" @update:modelValue="myTitle = $event" />
<!-- 简写为 -->
<ChildComponent v-model="myTitle" />
  1. 删除了async 修饰符,该功能由 v-model 的参数替代。
<ChildComponent :title="myTitle" @update:title="myTitle = $event" />
<!-- 简写为 -->
<ChildComponent v-model:title="myTitle" />
  1. 允许自定义v-model修饰符。官网参考
<!-- 父组件 -->
<template>
  <ChildComponent v-model.cap="data1" v-model:title.capitalize="data2" />
</template>

<script setup>
import { ref, reactive } from "vue";
import ChildComponent from "./components/ChildComponent.vue";

const data1 = ref(false);
const data2 = reactive({ a: 1, b: 2 });
</script>
<!-- 子组件 -->
<script setup>
const props = defineProps({
  modelValue: Boolean,
  title: Object,
  modelModifiers: { default: () => ({}) }, // v-model 默认的修饰符对象。
  titleModifiers: { default: () => ({}) }, // v-model 有参数时,修饰符对象为 arg + "Modifiers"
});
console.log(props.modelModifiers); // {cap: true}
console.log(props.titleModifiers); // {capitalize: true}
</script>

2,v-if 和 v-for

vue2 和 vue3 都不推荐同时使用 v-ifv-for

优先级:

  • vue2:v-for > v-if。官网参考
  • vue3:v-for < v-if。官网参考

3,key

v-for

当使用<template>进行v-for循环时:

  • vue2 的 key 需要放到子元素上。
  • vue3 的 key 需要放到 <template> 上。
<!-- vue2 -->
<template v-for="todo in todos">
  <li :key="todo.name">{{ todo.name }}</li>
</template>
<!-- vue3 -->
<template v-for="todo in todos" :key="todo.name">
  <li>{{ todo.name }}</li>
</template>

v-if

当使用 v-if v-else-if v-else分支的时:

  • vue2 需要指定 key 才能保证唯一。
  • vue3 不再需要指定key值,因为会自动给每个分支一个唯一的key

使用如下代码举例

<template>
  <div>
    <div v-if="showAccount">
      <label for="">账号</label>
      <input type="text" name="" id="" />
    </div>
    <div v-else>
      <label for="">密码</label>
      <input type="text" name="" id="" />
    </div>
    <button @click="showAccount = !showAccount">切换</button>
  </div>
</template>

vue2 的效果

在这里插入图片描述

vue3 的效果

在这里插入图片描述

vue2 想实现一样的效果,就得给 v-if v-else 分支添加唯一 key 才行。

4,Fragment

vue3现在允许组件出现多个根节点。

<!-- vue2 -->
<template>
  <div>
    <h1>标题1</h1>
    <h2>标题2</h2>
  </div>
</template>
<!-- vue3 -->
<template>
  <h1>标题1</h1>
  <h2>标题2</h2>
</template>

2,组件的变化

1,Teleport

官网参考

是 vue3 的内置组件。该组件的子元素将被渲染到指定 DOM 元素中(使用 to 指定)。

to 可以是 css 选择器字符串,也可以是 DOM 元素对象。

经典例子:Dialog 弹窗一般都会渲染到 body 元素下。

<template>
  <div>
    <button @click="open = true">Open Modal</button>
    <Teleport to="body">
      <div v-if="open">
        <p>dialog</p>
        <button @click="open = false">Close</button>
      </div>
    </Teleport>
  </div>
</template>

<script setup>
import { ref } from "vue";

const open = ref(false);
</script>

2,异步组件

参考这篇文章


以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/122911.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新版HI3559AV100开发注意事项

新版HI3559AV100开发注意事项 一、在Hi3559A上使用openCV VideoCapture开启.mp4影像档, isOpened一直得到false 在Hi3559A上已经cross compile ffmepg 4.1openCV 3.4.4 但使用openCV VideoCapture开启.mp4影像档, isOpened一直得到false 请问要如何知道是什么原因无法开启影像…

java测试private

java测试private变量、方法 📕反射的基本作用、关键? 反射是在运行时获取类的字节码文件对象,然后可以解析类中的全部成分反射的核心思想和关键就是:得到编译以后的class文件对象可以破坏封装性(很突出)也可以破坏泛型的约束性(很突出)更重要的用途是适合:做java高级…

运营商大数据精准获客:我们提供精准客源渠道的最大资源体?

运营商大数据精准营销 谈起精准获客&#xff0c;竞争对手永远是为我们提供精准客源渠道的最大资源体&#xff01; 最新的获客方式&#xff0c;就是从竞争对手的手中把他们的精准客户资源变为自己的。 今年最火的运营商大数据精准营销是拒绝传统营销方式的烧钱推广&#xff0…

VSCode使用插件Github Copilot进行AI编程

演示示例 函数封装 根据上下文 根据注释 详情请看GitHub Copilot 安装插件 在VS Code中安装插件 GitHub Copilot 登录账号 点击VS code左下角账户图标&#xff0c;点击【Sign in】&#xff0c;会自动在浏览器打开Github登录页&#xff0c;登录具有 Github Copilot 服务的…

国产化精密划片机已得到国内更多厂家青睐

国产化精密划片机在近年来得到了国内许多厂家的青睐&#xff0c;这是因为精密划片机在工业生产中有着重要作用。这种设备主要用于高精密切割加工&#xff0c;适用于多种材料&#xff0c;包括硅、石英、氧化铝、氧化铁等。 以精密晶圆划片机为例&#xff0c;这种设备采用了自主研…

软件测试|iOS 自动化测试——技术方案、环境配置

移动端的自动化测试&#xff0c;最常见的是 Android 自动化测试&#xff0c;我个人觉得 Android 的测试优先级会更高&#xff0c;也更开放&#xff0c;更容易测试&#xff1b;而 iOS 相较于 Android 要安全稳定的多&#xff0c;但也是一个必须测试的方向&#xff0c;这个系列文…

OpenCV 图像复制和图像区域读写

图像复制 共享数据, 使用 new Mat(srcMat, ...) 和 newMatsrcMat 生成新的Mat都和原Mat共享数据, 也就是说如果修改某一Mat,其他Mat也会随之改变复制全新的Mat, 使用CopyTo() 和 Clone() 方法将生成一个全新的Mat, 新Mat和原Mat不共享数据. 图像区域和点的读写 区域读取: 通过s…

【node+JS】前端使用nodemailer发送邮件

前言邮箱配置完整代码 前言 最近需要实现客户提交表单后&#xff0c;把表单的内容作为邮件发送到对应的邮箱&#xff0c;不通过后端服务&#xff0c;前端直接进行发送。嘶——&#xff0c;说干就干&#xff01; 一通搜索下来&#xff0c;get到方法有很多种&#xff0c;但是。。…

原文远知行COO张力加盟逐际动力 自动驾驶进入视觉时代?

11月7日&#xff0c;通用足式机器人公司逐际动力LimX Dynamics官宣了两位核心成员的加入。原文远知行COO张力出任逐际动力联合创始人兼COO&#xff0c;香港大学长聘副教授潘佳博士为逐际动力首席科学家。 根据介绍&#xff0c;两位核心成员的加入&#xff0c;证明一家以技术驱…

如何在OpenWRT上安装SFTP并实现公网远程文件传输

文章目录 前言 1. openssh-sftp-server 安装2. 安装cpolar工具3.配置SFTP远程访问4.固定远程连接地址 前言 本次教程我们将在OpenWRT上安装SFTP服务&#xff0c;并结合cpolar内网穿透&#xff0c;创建安全隧道映射22端口&#xff0c;实现在公网环境下远程OpenWRT SFTP&#xf…

关于阿里云 ACK ingress部分补充

强调&#xff1a; 本文只是作为记录,过一段时间会删除 跟唐老师学习网络 一 Nginx Ingress管理 ① 流量走向 需求&#xff1a; 应用绑定LoadBalance,会自动创建或使用SLBeip:port --> nodeport_ip:port --> service_ip:port --> pod_ip:port 支持的注解 通过…

不妨看看这招: 电销获客渠道——优质的电销数据资源

由于时间的变化&#xff0c;电话营销寻找客户变得越来越困难&#xff0c;这涉及到寻找联系潜在客户的方法。第二个原因是电话禁令相对严厉&#xff0c;电话营销水平参差不齐&#xff0c;人员流动大&#xff0c;导致吸引客户的成本越来越高。那么&#xff0c;电话营销行业的渠道…

【腾讯云 HAI域探秘】借助HAI,轻松部署StableDiffusion环境拿捏AI作画-体验实验赢大奖

爆火的Ai生图你体验到了吗&#xff1f; 没有绘画能力、摄影能力也能随心所欲的创作出自己的作品&#xff01; 但是很多人因为高昂的硬件和繁琐的安装对它望而却步。 腾讯云的高性能应用服务 HAI &#xff08;Hyper Application Inventor&#xff09;是一款专门为AI和科学计算…

xv6实验课程--xv6的写时复制fork(2023)

7. xv6实验课程--xv6的写时拷贝(COW)(2021) 7. xv6实验课程--xv6懒惰分页分配&#xff08;lazy)(2020) 本文来源&#xff1a; https://mp.weixin.qq.com/s/XJkhjrlP232ZDsRyXd0oHQ 已完成的实验代码可以从下列网站获取&#xff1a; git clone https://gitee.com/lhwhit196…

PDF Expert for mac(苹果电脑专业pdf编辑器)兼容12系统

PDF Expert是macOS平台上的一款优秀的PDF阅读和编辑工具&#xff0c;由Readdle公司开发。它不仅拥有方便、易用的界面&#xff0c;还具备诸多功能&#xff0c;比如编辑PDF文件、添加批注、填写表格、签署文件、合并文档等。安装:PDF Expert for Mac(PDF编辑阅读转换器)v3.5.2中…

CAN总线协议的理解以及移植stm32代码并使用

什么是CAN总线协议 是一种异步半双工的通讯协议&#xff0c;只有CAN_High与CAN_Low两条信号线。 有两种连接形式&#xff1a;闭环总线&#xff08;高速&#xff09;和开环总线&#xff08;远距离&#xff09; 他使用的是一种差分信号来传输电信号 所谓差分信号就是两条信号线…

Linux防火墙firewalld(粗糙版)

上篇是iptables的增删改查 自定义链&#xff1a; systemctl stop firewalld setenforce 0 iptables -N lmn iptables -vnL iptables -t filter -vnL 修改链名&#xff1a; iptables -E lmn ky01 iptables -t filter -vnL iptables -t filter -I ky01 -p icmp -j ACCEP…

蓝桥杯每日一题2023.11.8

题目描述 题目分析 对于输入的abc我们可以以a为年也可以以c为年&#xff0c;将abc,cab,cba这三种情况进行判断合法性即可&#xff0c;注意需要排序去重&#xff0c;所以考虑使用set 此处为纯模拟的写法&#xff0c;但使用循环代码会更加简洁。 方法一&#xff1a; #include&…

基于java web的计算机office课程平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

无人机航迹规划:七种智能优化算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划--提供MATLAB代码

一、七种算法&#xff08;DBO、LO、SWO、COA、LSO、KOA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…