位置: IT常识 - 正文

vue3.2 基础及常用方法(vue3.0用法)

编辑:rootadmin
vue3.2 基础及常用方法

推荐整理分享vue3.2 基础及常用方法(vue3.0用法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue3快速入门,vue 3教程,vue基本,vue 3教程,vue 3教程,vue3 入门,vue基础知识,vue3.0用法,内容如对您有帮助,希望把文章链接给更多的朋友!

Vue3.2(21年8月10日)相比于Vue3新增了语法糖,减少了代码冗余

Vue3相比于Vue2,在虚拟DOM,编译, 数据代理,打包构建封面进行了优化

Vue3使用组合式API, 适合大型项目, 去除了this

vue2的 beforeCreate 和 created 被新增的setup生命周期替代

vue3 使用插件: volar 配置用户代码片段可以快速输入vue3 模板

1. css支持v-bind 指令:<template> <div class="box">{{color}}</div></template><script setup> import {ref} from 'vue' let color = ref('red')</script><style scoped>.box { width: 100px; height: 50px; background-color: v-bind(color);}</style>2. setup语法糖

vue3.0的变量需要return出来才可以在template中使用, 写法冗余

vue3.2 在script标签中添加setup解决问题 组件只需要引入,不需要注册,属性方法不需要返回,不需要写setup函数,不需要写export default

3. data定义3.1 直接定义无响应式

let name = ‘zhangsan’

3.2 ref定义基本数据类型

在script标签内,需要用 name.value 修改和获取值

可以接受基本类型、也可以是复杂类型(比如对象,数组)。建议处理基本类型数据。

基本类型的数据:响应式依然是靠Object.defineProperty()的get与set完成的。

<template> <div>{{name}}</div> <button @click="setName">set</button></template><script setup> import {ref} from 'vue' let name = ref('zhangsan') const setName = () => { name.value = 'lisi' }</script><style scoped></style>3.3 reactive 定义引用数据类型

reactive支持引用类型, 直接 变量.属性 使用和修改

<template> <div>{{user.name}}</div> <div>{{user.money}}</div> <button @click="setItem">set</button></template><script setup> import {reactive} from 'vue' let user = reactive({ name: 'zhangsan', money: 1000 }) const setItem = () => { user.money = 1500 user.gupiao = 100 }</script><style scoped></style>4. methods方法定义

在template中 :

<button @click='addMoney'>加钱</button>

在script中:

const money = ref(1000)const addMoney = () => { money.value ++}5. computed计算属性

获得一个新的属性

<template> <div>{{nameString}}</div> <div>{{user.money}}</div> <button @click="setItem">set</button></template><script setup> import {reactive, computed} from 'vue' let user = reactive({ name: 'zhangsan', money: 1000 }) const nameString = computed(() => { return '我的名字是' + user.name })</script><style scoped></style>6 watch使用:

监听响应式数据的变化

watch(数据源, 执行函数, [配置参数])// 配置的参数:立即执行, 深度监听{immediate: true, deep: true}

6.1 监听基本数据类型 单一数据源

<script setup>import {ref, watch} from 'vue' let name = ref('zhnagsan') //直接监听属性watch(name,(newVal,oldVal)=>{ console.log('变量发生了改变...',newVal, oldVal);})

6.2 监听引用数据类型 单一数据源

<template> <div>{{user.name}}</div> <div>{{user.money}}</div> <button @click="setItem">set</button></template><script setup> import {reactive, watch} from 'vue' let user = reactive({ name: 'zhangsan', money: 1000 }) // 监听方法返回的属性 watch(() => user.money, (newVal, oldVal) => { console.log('user money 变了: ', newVal, oldVal) }) const setItem = () => { user.money = 1500 }</script>

6.2 监听引用数据类型 多数据源[深度监听]

<template> <div>{{user.name}}</div> <div>{{user.money}}</div> <div>{{user.hobby.study}}</div> <button @click="setItem">set</button></template><script setup> import {reactive, watch} from 'vue' let user = reactive({ name: 'zhangsan', money: 1000, hobby: { study: '语文' } }) // 深度监听 {deep:true} watch(() => user.hobby.study, (newVal, oldVal) => { console.log('user money 变了: ', newVal, oldVal) }, {deep:true}) const setItem = () => { user.hobby.study = '数学' }</script>7. 生命周期vue3.2 基础及常用方法(vue3.0用法)

import { onMounted } from 'vue'onMounted(() => { console.log(document.querySelector('.box')) // 可以获取DOM})7.1 ref获取元素<template> <div ref="box"> <button>Hehe</button> </div></template><script setup> import { ref, onMounted } from "vue"; const box = ref(null); onMounted(() => { console.log(box.value); });8 组件使用创建 components/Son.vue在App.vue 中导入子组件Vue3.2 在导入子组件时,自动注册该组件组件名格式: 大驼峰写法

子组件Son.vue

<template> <div>Son compoment</div></template><script setup></script>

父组件

<template> <Son/></template><script setup>import Son from './components/Son.vue'</script>

全局组件: main.js

app.component('ComponentB', ComponentB)<ComponentA/>9.组件通信9.1 父传子 defineProps

子组件Son.vue

<template> <div>Son compoment</div> <div>{{name}}</div> <div>{{like}}</div></template><script setup>const props = defineProps({ name: { type: String, default: "" }, like: { type: Array, default: () => [] }})</script>

父组件

<template> <Son name="小灰灰" :like="like"/></template><script setup>import Son from './components/Son.vue'let like = ["红太狼", "灰太狼"]</script>9.2 子传父 defineEmits

子组件

<template> <button @click="sendData">传递数据</button></template><script setup>// 自定义事件const emit = defineEmits(['send'])// 事件执行函数const sendData = () => { emit('send', '子组件的数据')}</script>

父组件

<template> <Son @send="getData"/></template><script setup>import Son from './components/Son.vue'const getData = (data) => { console.log('父组件获取到: ', data)}</script>条件渲染<template> <div v-if="type === 'A'"> A </div> <div v-else-if="type === 'B'"> B </div> <div v-else> Not A/B </div></template><script setup>let type = 'B'</script>列表渲染<template> <li v-for="item in items"> {{ item.message }} </li></template><script setup>import {ref} from 'vue'let items = ref([ {message: 'm1'}, {message: 'm2'}, {message: 'm3'}])setTimeout(() => { items.value.push({message: 'm4'})}, 2000)</script>事件处理<button @click="say">Say bye</button>// 传递参数<button @click="say('bye')">Say bye</button>

事件修饰符:

.stop .prevent .self .capture .once .passive

<!-- 单击事件将停止传递 --><a @click.stop="doThis"></a>表单输入绑定(用于、、)<input v-model="text"><input type="radio" v-model="pick" :value="first" /><input type="radio" v-model="pick" :value="second" />插槽slot 实现 可以用在不同的地方渲染各异的内容,但同时还保证都具有相同的样式。

使用

<FancyButton> Click me! <!-- 插槽内容 --></FancyButton>

组件:

<button class="fancy-btn"> <slot></slot> <!-- 插槽出口 --></button>

元素是插槽, 父元素插槽内容将在slot处渲染 渲染之后的DOM:

<button class="fancy-btn">Click me!</button>

另一中js的方式理解:将内容传递给子元素, 子元素包裹时候生成DOM,返回给父元素

// 父元素传入插槽内容FancyButton('Click me!')// FancyButton 在自己的模板中渲染插槽内容function FancyButton(slotContent) { return `<button class="fancy-btn"> ${slotContent} </button>`}

子组件

<template> <li v-for="item in items"> <slot></slot> </li> <button class="fancy-btn"> <slot></slot> <!-- 插槽出口 --> </button></template><script setup>import {ref} from 'vue'let items = ref([ {message: 'm1'}, {message: 'm2'}, {message: 'm3'}])</script>

父组件

<Son> ABC </Son>Teleport: 组件传送到DOM节点 <Teleport> 是一个内置组件,它可以将一个组件内部的一部分模板“传送”到父组件的外的其他 DOM 结构外层的位置去。

如下传送到了body元素上

<template> <div> <button @click="open = true">Open Modal</button> <Teleport to="body"> <div v-if="open" class="modal"> <p>Hello from the modal!</p> <button @click="open = false">Close</button> </div> </Teleport> </div></template><script setup>import { ref } from 'vue'const open = ref(false)</script><style scoped>.modal { position: fixed; z-index: 999; top: 20%; left: 50%; width: 300px; margin-left: -150px; border: 2px red solid;}</style>

// 传送到id为teleport-target的DOM元素上:

<Teleport to="#teleport-target"> </Teleport>模板引用 通过ref获取DOM元素<template> <div ref="divRef">divRef</div></template><script> import { onMounted, ref } from 'vue' const divRef = ref(null) onMounted(() => { // 挂载后才可以获取DOM元素 console.log('[long] divRef: ', divRef.value) })</script>条件渲染 17.1 条件渲染 v-if<div v-if="type==='A'">A</div><div v-else-if="type==='B'">B</div><div v-else>C</div>

多元素条件渲染:使用<template>包装器元素

<template v-if="ok"> <p>P1</p> <p>P2</p></template>

17.2 条件渲染 v-show v-if 不保留DOM元素,切换开销更高 v-show 保留DOM元素,设置display属性,不支持template包装器元素,初始渲染开销高

17.3 不推荐使用v-if 和 v-for同时使用, 同时使用时v-if首先执行

列表渲染v-forconst items = ref([{ message: 'F1' },{ message: 'F2' }])<li v-for="(item, index ) in items"> {{ item.message }} - {{ index }}</li>

item 是迭代项别名

使用template渲染多个元素

<ul> <template v-for="item in items"> <li>{{ item.msg }}</li> <li class="divider" role="presentation"></li> </template></ul>
本文链接地址:https://www.jiuchutong.com/zhishi/299352.html 转载请保留说明!

上一篇:前端面试中经常提到的LRU缓存策略详解(前端面试经常被问的问题)

下一篇:Node.js下载安装及环境配置教程【超详细】(node.js安装步骤)

  • realmebook处理器是什么(realme处理器是什么)

    realmebook处理器是什么(realme处理器是什么)

  • word文档怎么插图片进去(word文档怎么插图片到表格中)

    word文档怎么插图片进去(word文档怎么插图片到表格中)

  • 荣耀nfc怎么复制门禁卡(荣耀nfc怎么复制公交卡到手机)

    荣耀nfc怎么复制门禁卡(荣耀nfc怎么复制公交卡到手机)

  • opporeno4手机一共有几个摄像头(opporeno4手机有什么新功能)

    opporeno4手机一共有几个摄像头(opporeno4手机有什么新功能)

  • 创建块的快捷命令(创建块的快捷键cad)

    创建块的快捷命令(创建块的快捷键cad)

  • 佳能打印机加墨(佳能打印机加墨后还是打不出来)

    佳能打印机加墨(佳能打印机加墨后还是打不出来)

  • idea社区版和商业版的区别(idea社区版和商业版怎么区分)

    idea社区版和商业版的区别(idea社区版和商业版怎么区分)

  • qq关联一方解除另一方还有吗(qq关联一方解除关联另一方知道吗)

    qq关联一方解除另一方还有吗(qq关联一方解除关联另一方知道吗)

  • vivo手机recovery模式清除数据需要密码(vivo手机recovery模式怎么退出)

    vivo手机recovery模式清除数据需要密码(vivo手机recovery模式怎么退出)

  • 抖音直播该注意的规则(抖音直播该注意的话术)

    抖音直播该注意的规则(抖音直播该注意的话术)

  • 荣耀20支持双击亮屏吗(荣耀20支持双击吗)

    荣耀20支持双击亮屏吗(荣耀20支持双击吗)

  • 华为手机连接蓝牙为什么没有声音(华为手机连接蓝牙耳机怎么连)

    华为手机连接蓝牙为什么没有声音(华为手机连接蓝牙耳机怎么连)

  • 抖音管理员是什么意思(抖音管理员有钱拿吗?)

    抖音管理员是什么意思(抖音管理员有钱拿吗?)

  • iwatch的gps和蜂窝网络有什么区别吗(iwatch的gps与蜂窝的区别)

    iwatch的gps和蜂窝网络有什么区别吗(iwatch的gps与蜂窝的区别)

  • 微信可以发几秒的视频(微信可以发几秒语音)

    微信可以发几秒的视频(微信可以发几秒语音)

  • vue字幕的字体怎么变大小(vue添加字幕怎么没显示)

    vue字幕的字体怎么变大小(vue添加字幕怎么没显示)

  • ip地址是固定的么(ip地址是固定的用户不能设置)

    ip地址是固定的么(ip地址是固定的用户不能设置)

  • 怎么关注淘宝直播间(怎么关注淘宝直播间个人主播)

    怎么关注淘宝直播间(怎么关注淘宝直播间个人主播)

  • realme是啥牌子(realme是什么牌名)

    realme是啥牌子(realme是什么牌名)

  • 拼多多50元签到金怎么兑换不了(拼多多50元签到是真的吗)

    拼多多50元签到金怎么兑换不了(拼多多50元签到是真的吗)

  • 去国外怎么用流量(去国外怎么用流量看电视)

    去国外怎么用流量(去国外怎么用流量看电视)

  • 转发抖音视频怎么去掉抖音号(转发抖音视频怎么换掉音乐)

    转发抖音视频怎么去掉抖音号(转发抖音视频怎么换掉音乐)

  • 如何开发点餐app(点餐系统小程序开发流程)

    如何开发点餐app(点餐系统小程序开发流程)

  • 电话卡里的话费可以转吗(电话卡里的话费可以转到微信吗)

    电话卡里的话费可以转吗(电话卡里的话费可以转到微信吗)

  • Vue路由实现之通过URL中的hash(#号)来实现不同页面之间的切换(图表展示、案例分析、附源码详解)(vue路由怎么实现)

    Vue路由实现之通过URL中的hash(#号)来实现不同页面之间的切换(图表展示、案例分析、附源码详解)(vue路由怎么实现)

  • 金蝶软件中怎么登记应该税费
  • 京东公户的钱怎么转出来
  • 个人劳务票必须本人开吗
  • 支付给个人的佣金费用需要发票吗
  • 企业购置房产进项被折旧怎么处理
  • 预算收入包括增值税吗
  • 更换税控盘后原发票如何导入旧盘开票税局
  • 企业资产核算不包括哪些
  • 单位购买定制的器材
  • 企业间资金往来 人员派驻
  • 捐赠和赞助业务的税务处理怎么做?
  • 财产损失税务备案
  • 车间报销费用的会计分录
  • 国有企业的所得税怎么算
  • 纳税人提供植物油的税率
  • 公司房租可以抵多少税
  • 投标标费退回怎么做分录
  • 固定资产残值率一般是多少
  • 实收金额比应收金额多
  • 小规模的应交税费涉及几个三级明细
  • 法人实名认证后没有绑定企业怎么办
  • 每个季度零申报需要做什么
  • win10如何删除windows账户
  • 格式化时防止数据丢失
  • 以前年度多计提的税金怎么调整
  • 现金流量表的编制基础是权责发生制
  • Win10 Build 19043.1266(21H1)更新已知问题汇总
  • 增值税进项税额转出的情况有哪些
  • 补充协议是否缴纳印花税
  • dsregcmd.exe
  • hp是什么代码
  • php的基础知识
  • Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
  • 语义特征的语法学概念
  • 2023前端面试题目
  • 浅谈建筑地基基础加固施工技术亲
  • 小米开发回稳定
  • 增资扩股税务处罚标准
  • 租赁公司一般都有什么税
  • 上年所得税费用借方有余额,怎么调整
  • 材料出入库的本质是什么
  • 银行存款对账方法
  • 需要做审计有哪些行业
  • 一般纳税人开普票和专票有什么区别
  • 员工垫付款报销单
  • 买赠行为的会计处理
  • 行政单位与事业单位净资产的比较
  • 预缴增值税销售额是含税还是不含税的开票金额
  • 应付职工薪酬账户贷方登记的是
  • 经营性现金流量三种算法
  • 政府补贴项目需要审批吗
  • 塔吊租赁和购买的区别
  • 账本结转下年怎么划线
  • 计划成本法和实际成本法的适用范围
  • 企业所得税季度交还要年交吗
  • 未开发票已付款
  • MySQL 5.0.96 for Windows x86 32位绿色精简版安装教程
  • win7和winxp区别
  • xp系统开机后什么都没有,怎么办
  • vista win10
  • windows10显示
  • mac cad软件
  • linux挂载windows共享文件命令
  • win10如何添加蓝牙驱动
  • windows10周年更新
  • 微软禁用windows
  • win8.1系统更新
  • ExtJS 2.0实用简明教程之应用ExtJS
  • [置顶]从lv2开始开挂的原勇者候悠闲的异世界生活
  • CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放
  • [置顶]马粥街残酷史
  • shell脚本 su
  • nodejs重启
  • JavaScript入门教程
  • javascript要打开吗
  • 房地产开发企业会计制度
  • 华为税务筹划情况
  • 湖北安徽是一个地方吗
  • 国税发票如何查真伪查询
  • 农村墓地规划土地使用程序和规定
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设