当前位置: 首页 > news >正文

前端工程化:Vue3(二)

本文为个人学习笔记整理,仅供交流参考,非专业教学资料,内容请自行甄别

文章目录

  • 一、Vue生命周期
  • 二、父子组件传值
    • 2.1、父组件传值子组件
    • 2.2、子组件传值子组件
  • 三、Slot插槽


一、Vue生命周期

  Vue 的生命周期是指一个 Vue 实例从创建、挂载、更新到销毁的整个过程。Vue 提供了多个生命周期钩子,可以在这些钩子函数中执行特定逻辑,比如发起请求、DOM 操作、清理定时器等。
  主要包含createdmountedupdateddestroyed,以及对应的before,一共八个状态。

beforeCreate -> created
beforeMount -> mounted
beforeUpdate -> updated
beforeDestroy -> destroyed

<script setup lang="ts">
import {onBeforeMount, onBeforeUpdate, onMounted, onUpdated, ref} from "vue";let count = ref(0);function addCount() {count.value++;
}//生命周期钩子函数//挂载
onBeforeMount(() => {console.log("挂载前 btn01按钮:" + document.getElementById("btn01"))console.log("挂载前 count:" + count.value)
})onMounted(() => {console.log("挂载完成 btn01按钮:" + document.getElementById("btn01"))console.log("挂载完成 count:" + count.value)
})//更新
onBeforeUpdate(() => {console.log("更新前 btn01内容:" + document.getElementById("btn01").innerHTML)console.log("更新前 count:" + count.value)
})onUpdated(() => {console.log("更新完 btn01内容:" + document.getElementById("btn01").innerHTML)console.log("更新完 count:" + count.value)
})</script><template><button id="btn01" @click="addCount">点了:{{ count }}</button>
</template><style scoped></style>

  挂载前的阶段,变量的值有,但是元素的值没有。当挂载完成后,才能获取到元素的值。
在这里插入图片描述
  点击页面上的按钮,触发更新前更新完成的生命钩子,在更新前,变量的值实际上已经发生了改变,但是元素上的值并没有更改,只有触发更新完成的事件后,元素上的值才会发生改变。

在这里插入图片描述

二、父子组件传值

2.1、父组件传值子组件

  父组件给子组件传值,是单向数据流,即父组件的值只会对子组件产生影响,如果需要父组件传值给子组件,在父组件中需要引入子组件,并且指定需要传给子组件的属性:

<script setup lang="ts">
import {ref} from "vue";
import Son from "./Son.vue";let money = ref(100)
let text = ref(['青天明镜映红尘', '度世舟上望苦海', '逍遥自在终超脱','彼岸之中看苍生'])function moneyMinis(data) {money.value = money.value - data
}
</script><template><div><h2>Father</h2><!--    父组件传递给子组件,单向数据流--><Son :money="money" :text="text" @buy="moneyMinis"></Son><button @click="money += 100">充值</button></div>
</template><style scoped></style>

  子组件如果需要接收父组件的值,则需要通过defineProps定义父组件传值的属性名:

<script setup lang="ts">let props = defineProps(['money', 'text']);</script><template><div style="background-color: #2fffa5"><h3>Son</h3><div>接收到父组件:{{ props.money }}</div><div>接收到父组件:<h2><li v-for="(f,i) in props.text">{{ f }}</li></h2></div></div>
</template><style scoped></style>

在这里插入图片描述

2.2、子组件传值子组件

  子组件给父组件传值,首先子组件需要使用defineEmits定义传值的事件名,然后使用emits进行传值。案例中是子组件有一个"扣款"的按钮,点击后触发buy函数,利用buy函数中的emits向父组件传值:

<script setup lang="ts">let props = defineProps(['money', 'text']);// 给父组件传值
let emits = defineEmits(['buy']);function buy() {emits('buy', 5)
}
</script><template><div style="background-color: #2fffa5"><h3>Son</h3><div>接收到父组件:{{ props.money }}</div><div>接收到父组件:<h2><li v-for="(f,i) in props.text">{{ f }}</li></h2></div><div><button @click="buy">扣款</button></div></div>
</template><style scoped></style>

  在父组件中,通过@子组件的defineEmits中定义的事件名,绑定一个函数,在函数中接收子组件传递的值,并且进行操作:

<script setup lang="ts">
import {ref} from "vue";
import Son from "./Son.vue";let money = ref(100)
let text = ref(['青天明镜映红尘', '度世舟上望苦海', '逍遥自在终超脱','彼岸之中看苍生'])function moneyMinis(data) {money.value = money.value - data
}
</script><template><div><h2>Father</h2><!--    父组件传递给子组件,单向数据流--><Son :money="money" :text="text" @buy="moneyMinis"></Son><button @click="money += 100">test</button></div>
</template><style scoped></style>

三、Slot插槽

  如果父子组件之间,想要传递一些自定义的内容,可以使用插槽,例如子组件的标题想要使用父组件提供的,在子组件中可以使用slot标签,指定属性名:

    <h3><slot name="title"/></h3>

  然后在父组件中通过templatev-slot指令指定属性名,这样template标签中的值会传递给子组件。

     <template v-slot:title>Son</template>
http://www.lryc.cn/news/611295.html

相关文章:

  • 贝叶斯统计从理论到实践
  • 自动牙龈边缘识别软件设计与实现
  • Android AppSearch 深度解析:现代应用搜索架构与实践
  • 消息队列疑难问题(RocketMQ)
  • 认识爬虫 —— bs4提取
  • 阿里招AI产品运营
  • 永磁同步电机的矢量控制
  • RK3568下使用Qt 绘制实现实时坐标曲线
  • 【Spring Cloud】-- 注册中心
  • PowerShell 入门2: 使用帮助系统
  • 异或游戏 运算符优先级问题
  • GB28181监控平台LiveGBS如何配置GB28181对接海康、大华解码器上墙,将GB28181平台是视频给硬件解码器解码上墙
  • cJSON库应用
  • C语言的常见错误与调试
  • uniapp renderjs 逻辑层,视图层互相传递数据封装
  • 背包初步练习
  • 计算机视觉面试保温:CLIP(对比语言-图像预训练)和BERT技术概述
  • Linux逻辑卷管理操作指南
  • 论文解读:Mamba: Linear-Time Sequence Modeling with Selective State Spaces
  • JSP相关Bug解决
  • AutoSar AP LT规范中 建模消息和非建模消息都可以使用LogInfo() API吗?
  • 达芬奇31-40
  • stm32F407 硬件COM事件触发六步换相
  • AI赋能复合材料与智能增材制造:前沿技术研修重磅
  • 智能融合:增材制造多物理场AI建模与工业应用实战
  • 【面向对象】面向对象七大原则
  • linux nfs+autofs
  • 注意点:Git 从安装到分支协作、冲突解决的完整步骤 ---待修改,没看这个步骤,需要重新整理步骤
  • ara::log::LogStream::WithTag的概念和使用案例
  • 跨域场景下的Iframe事件监听