vue生命周期及组件讲解(如何导入引用外部vue文件,以及注册全局变量,自定义标签效果)

news2025/1/3 4:10:42

生命周期钩子的理解与应用

函数说明
onBeforeMount( )组件挂载前
onMounted( )组件挂载后
onBeforeUpdate( )组件更新前
onUpdated( )组件中任意的DOM元素更新后
onBeforeUnmount( )组件实例被销毁前
onUnmounted( )组件实例被销毁后
  • 生命周期在 各类应用以及网站中使用非常广泛,就如某音乐,需要vip才能听完整的歌曲,若是普通用户只能免费试听30秒,底层的逻辑思想和生命周期钩子一样,当用户在登录时,先会执行挂载前,当登录成功后,就到了挂载后,开始渲染页面,此时用户看到网页主页面效果,当用户购买vip时,先会执行更新数据前,当购买成功后,就会执行更新数据后的代码,通过判断用户身份,解锁付费歌曲的播放权限。当用户想要注销账号时,就会先调用更新数据前,准备删除,准备完成后,执行销毁前的代码,一般是提示你确定要删除或注销账号吗,当点击确定,则执行了被销毁后的代码段,此时账号被注销,无法再登录。

    代码演示如下:

    在APP.vue中

<template>
  <div>
    <HelloWorld v-if="type"></HelloWorld>
    <br>
    <button @click="xiaohui">销毁</button>
  </div>
  <HelloWorld msg="Vue课程" />
</template>

<script setup>
import {ref} from "vue"
import HelloWorld from './components/live.vue'
const type = ref(true)
const xiaohui = () =>{
  type.value = false
}

</script>
<style>

</style>
  • 在live.vue文件中
<template>

   <div class="container">
       <h1>这是生命周期</h1>
   </div>
   <hr>
        <button  @click="count++">更新数值</button>
        <div  id="id1">count  value  is {{ count }}</div>
    <hr>
    <hr>
        <button  @click="count2++">更新数值</button>
        <div  id="id2">count  value  is {{ count2 }}</div>
        <hr>
      <div  v-if="flag" >
    </div>
    <button  @click="flag= !flag">控制显示</button>  
</template>

<script setup>
import  {
    onBeforeMount,
    // 挂载
    onMounted,

    onBeforeUpdate,
    onUpdated,

    onBeforeUnmount,
    // 渲染
    onUnmounted
}  from  'vue';
import  { ref }  from  'vue';
const  count = ref(0)
const  count2 = ref(0)
const  flag=ref(true)

onBeforeMount(
    ()=> {
        // 回调函数,先出现,反引号
        alert(`在挂载前${document.querySelector(".container")}`)
    }
)
onMounted(
    () => {
        // 回调函数,后出现,渲染--innerHTML,查询
        alert(`在挂载前${document.querySelector(".container").innerHTML}`)
    }
)
onBeforeUpdate(
    () => {
        alert(`在更新前${document.querySelector("#id1").innerHTML}`)

    }
)
onUpdated(
    () => {
        alert(`在更新后${document.querySelector("#id1").innerHTML}`)  
    }
)
onBeforeUnmount(

    () => {
        alert(`准备销毁`) 
    }
)
onUnmounted(
    () => {
        alert(`销毁成功`) 
    }

)
</script>
<style>
 
</style>

自定义组件及父类的数据传递,子类的数据接收

从外部应用其他vue组件内容

  • 作用:可以让编辑代码的页面看起来更简洁,且方便后期对各个板块的代码进行维修,升级。

  • 代码如下

App.vue文件

<script setup>
import HelloWorld from './components/p.vue'
</script>

<template>

  <HelloWorld msg="Vite + Vue" />
</template>

<style scoped>

</style>

p.vue文件

<template>
  <h1> 这是组件p</h1>
  <p2></p2>
  <p3></p3>

</template>

<script setup>
 import p2 from './p2.vue'
 import p3 from './p3.vue'
</script>

<style>
/* scoped是范围的意思,如果在父组件里添加,则父组件的样式会覆盖子组件的样式 */
h1{
  color: red;
}
</style>

​ p2.vue文件

<template>
    <h1> this is p2</h1>
</template>

<script setup>
</script>
<style scoped>
/* scoped是范围的意思,如果不加会被父组件的样式给覆盖掉 */
h1{
    color: purple;
}
</style>

​ p3.vue文件

<template>
    <h1> これは p3</h1>
</template>

<script setup>

</script>

<style scoped>
h1{
    color: aqua;
}
</style>
  • 效果如下

在这里插入图片描述

定义全局变量,从而在用时直接引用标签

  • main.js是用来控制整个项目的核心,在这个文件里,可以先引用(导入)需要的vue文件,并通过设置全局变量,自定义标签后,在项目任意一个vue文件中无需再次引用(导入)外部vue文件,直接应用自定义的标签,就可以获得对应的效果

​ main.js文件

// 设置为全局引用,这样不用导入就可以直接使用标签来实现效果
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'

// 1.先引用过来
import p2 from './components/p2.vue'
import p3 from './components/p3.vue'

const app = createApp(App);

// 2.全局注册
app.component('p2', p2)
app.component('p3', p3)
app.mount('#app')

​ 在注册完全局变量后,之前的p.vue文件中引用外部vue文件的代码就可以省略了

​ p.vue文件

<template>
  <h1> 这是组件p</h1>
  <p2></p2>
  <p3></p3>

</template>

<script setup>
// 这2行引用外部vue文件就可以去掉了
// import p2 from './p2.vue'
// import p3 from './p3.vue'
</script>

<style>
/* scoped是范围的意思,如果在父组件里添加,则父组件的样式会覆盖子组件的样式 */
h1{
  color: red;
}
</style>

​ 网页效果不变!!!

数据在不同vue文件之间的传递

  • 数据在不同vue文件之间传递是经常使用的,例如在选购完商品后,跳转到新的支付页面,购物页面的商品价格的数据,就要传递到支付页面,然后完成支付购买。

  • 为演示数据传递过程,我创建了以下结构的文件夹

    在这里插入图片描述

其中主要是将Parent.vue的数据传输给Child.vue文件中,因此我在Parent.vue中定义数据(定义变量),在Child.vue文件中定义数据接收器defineProps( ),为了验证Child.vue成功接收数据,我在Parent.vue中通过标签调用defineProps( )中的数据。详细代码如下:

Parent.vue文件

<template>
   <h2>这个是Parent</h2>
   <!-- 只有通过动态绑定才能添加数字类型的数据 -->
   <!-- 把信息传递到子组件中 -->
    <Child :msg="msg" :num="num" :count="count"></Child>
</template>

<script setup>
import Child from './Child.vue'
import {ref} from 'vue';

// 定义父组件的信息
const msg = ref("hello world from parent")
const num = ref(100)
const count = ref(1)
</script>

<style scoped>

</style>

Child.vue文件

<template>
   <h1>hello world</h1>
   <p>{{ msg }}</p>
   <p>{{ num }}</p>
   <p>个数是:{{ count }}</p>

</template>

<script setup>
// 用于接收外部父组件传递的信息,在父组件中的标签头使用

const props = defineProps(
    {
        msg: String,
        num: Number,
        count: Number
    }
)
</script>

<style scoped>
</style>

要想动态的改变数据,就需要Parent.vue文件中继续做一些操作啦,例如我添加并绑定了一个按钮,当我点击改变按钮时,数据就会被替换。

修改后的Parent.vue文件:

<template>
   <h2>这个是Parent</h2>
   <!-- 只有通过动态绑定才能添加数字类型的数据 -->
   <!-- 把信息传递到子组件中 -->
    <Child :msg="msg" :num="num" :count="count"></Child>
    <button @click="change"> 改变</button>
</template>

<script setup>
import Child from './Child.vue'
import {ref} from 'vue';

// 定义父组件的信息
const msg = ref("hello world from parent")
const num = ref(100)
const count = ref(1)

const change = () =>{
    msg.value = '改变后的数据'
    num.value = 999
    count.value = 2
}
</script>
<style scoped>
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Running Gradle task ‘assembleDebug‘ Flutter项目

基于Android方面运行Flutter项目一直卡在 Launching lib\main.dart on Android SDK built for x86 in debug mode… Running Gradle task ‘assembleDebug’… 基础原因&#xff1a; 默认存放Gradle插件包的Maven仓库是国外(需VPN) 我的原因&#xff1a; 缺少JDK和缺少Androi…

Python 俄罗斯方块小游戏【含Python源码 MX_007期】

系统简介&#xff1a; 俄罗斯方块是一款经典的俄罗斯益智游戏&#xff0c;由苏联工程师阿列克谢帕基特诺夫&#xff08;Alexey Pajitnov&#xff09;于1984年创建。在游戏中&#xff0c;玩家需要操纵不同形状的方块&#xff0c;以水平移动和旋转的方式&#xff0c;使它们在屏幕…

【论文阅读】-- 时态合并树状图:时态标量数据的基于拓扑的静态可视化

时态合并树状图&#xff1a;时态标量数据的基于拓扑的静态可视化 摘要1 引言2 相关工作及背景介绍2.1 增广合并树2.2 (增强)合并树的可视化与跟踪2.3 特征跟踪2.4 数据线性化 3 时间合并树状图3.1 映射单个时间步长&#xff1a; R d → R R^d \rightarrow R Rd→R3.2 映射所有时…

Stable Diffusion: ControlNet 插件安装

前面介绍了一些通过代码实现ControlNet进行控制的案例。现在通过Stable Diffusion体验一下更便捷的操作。 Stable Diffusion插件安装办法大致相同。启动Stable Diffusion后&#xff0c;点击最右边的“扩展”&#xff0c;点击“可下载”&#xff0c;点击“加载扩展列表”。 视网…

开个技术外挂 | 数字孪生技术如何成为美洲杯帆船赛成功的关键?

若您对数据分析以及人工智能感兴趣&#xff0c;欢迎与我们一起站在全球视野关注人工智能的发展&#xff0c;与Forrester 、德勤、麦肯锡等全球知名企业共探AI如何加速工业变革&#xff0c;共享众多优秀行业案例&#xff0c;开启AI人工智能全球新视野&#xff01;&#xff01; …

【小白专用 已验证24.6.7】C# MySQL数据库访问操作封装类

一、底层库介绍 本文主要介绍数据库访问操作类&#xff0c;包含&#xff1a;SQL插入脚本、SQL查询脚本、数据库表是否存在判断、带参脚本执行、包含事务回滚脚本执行、存储过程脚本等等。 特殊说明 在使用之前&#xff0c;先安装 MySql.Data 插件 二、底层库源码 2.1 程序源…

如何合并pdf文件到一个pdf

在现代办公和学习中&#xff0c;PDF格式的文件因其跨平台兼容性和安全性得到了广泛应用。然而&#xff0c;有时我们需要将多个PDF文件合并成一个&#xff0c;以便于管理和分享。本文将详细介绍几种合并PDF的方法&#xff0c;帮助读者轻松完成PDF文件的合并工作。 首先通过浏览器…

JWT工具【工具类】

一、JWT JSON Web Token (JWT)是一个开放标准&#xff08;RFC 7519&#xff09;&#xff0c;定义了一种紧凑且自包含的方式&#xff0c;以JSON对象的形式在各方之间安全地传输信息。这种信息可以被验证和信任&#xff0c;因为它是数字签名的。具体来说&#xff0c;JWT是一种用…

柏曼的台灯值得入手吗?书客、明基横向测评对比

据相关研究显示&#xff0c;我国青少年的近视问题尤为严峻&#xff0c;总体近视率已逼近53%&#xff0c;这一超过半数的数据令人触目惊心。随着孩子学龄的增长&#xff0c;学习负担不断加重&#xff0c;眼部的压力也随之剧增&#xff0c;从而导致近视率持续攀升。普通台灯可能发…

【方法】Word文档如何添加“打开密码”?

Word文档是很常用的办公文档&#xff0c;对于重要的文档&#xff0c;不想被他人随意查看&#xff0c;或者只有指定的人可以查看&#xff0c;我们可以给Word文档设置密码保护&#xff0c;这样只有知道密码的人才可以打开文档。 下面分享两种Word文档添加“打开密码”的方法&…

真的不再需要程序员了?

AI时代&#xff1a;程序员的终结还是新起点&#xff1f; ©作者|Ninja Geek 来源|神州问学 “基本上以后不会存在程序员这种职业了&#xff0c;所有人只要会说话&#xff0c;甚至连写字可能都不用&#xff0c;你就具备今天程序员所具备的能力&#xff0c;所以这个意义还是…

D咖饮品机入驻奇轩商贸,为DF101大规模入驻荆州拉开序幕

荆州&#xff0c;一座历史悠久的城市&#xff0c;如今正焕发着新的活力与魅力。而这股活力的源泉之一&#xff0c;正是奇轩商贸的一次创新尝试——D咖智能饮品机的入驻。这不仅仅是一次机器设备的更新&#xff0c;更是一场技术与美味的碰撞&#xff0c;为DF101大规模入驻荆州市…

8086汇编 add指令学习

ADD&#xff0c;是Intel x86平台的汇编加法指令&#xff0c;MEM代指操作数为内存或寄存器&#xff0c;REG代指操作数为寄存器&#xff0c;IMM代指立即数&#xff0c;SEG代指操作数为段寄存器。 形式和示例如下&#xff1b; ADD MEM8,REG8 ADD DS:[BXSI],AL ADD MEM16,R…

App推广效果分析,Xinstall助力精准优化

App推广效果分析&#xff1a;Xinstall助力精准优化 在App推广的激烈竞争中&#xff0c;如何确保每一次推广活动都能带来最佳效果&#xff0c;是每个运营者都关心的问题。Xinstall作为一款专业的App推广工具&#xff0c;不仅提供了全方位的推广支持&#xff0c;还能通过精准的数…

学会python——密码校验(python实例三)

目录 1、认识Python 2、环境与工具 2.1 python环境 2.2 pycharm编译 3、纠正密码输入的格式问题 3.1 代码构思 3.2 代码示例 3.3 运行结果 4、总结 1、认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可…

鸿蒙轻内核A核源码分析系列七 进程管理 (2)

本文先熟悉下进程管理的文件kernel\base\core\los_process.c中的内部接口&#xff0c;读读代码&#xff0c;做些记录。 1、LiteOS-A内核进程全局变量 ⑴是进程池&#xff0c;存放各个进程控制块LosProcessCB的信息。⑵处开始的g_freeProcess是空闲进程链表&#xff0c;挂载各…

美业门店管理系统Java源码分享-【库存管理】的功能和作用

美业收银系统在美容行业中的作用和重要性体现在提高管理效率、提升客户满意度、降低成本、促进业务增长等方面。它为连锁美业提供了一个全面的管理工具&#xff0c;能够更好地应对市场挑战&#xff0c;提升竞争力。 美业系统中的【库存管理】在整个美容行业中起着非常重要的作…

【SpringBoot系列】覆盖重写第三方Jar包中类

要覆盖或重写一个第三方JAR包中的类&#xff0c;你可以使用以下几种方法&#xff1a; 方法一&#xff1a;使用类路径优先级 Java的类加载机制会优先加载类路径&#xff08;classpath&#xff09;中最先找到的类。因此&#xff0c;如果你在自己的项目中定义了一个与第三方JAR包…

天地图开发实战:Vue结合OpenLayers实现动态点位地图

在Web开发中&#xff0c;地图功能是一个常见的需求&#xff0c;尤其是在需要展示地理位置信息的应用程序中。OpenLayers&#xff08;简称OL&#xff09;是一个强大的JavaScript库&#xff0c;用于创建交互式地图。本文将介绍如何利用OpenLayers和天地图API&#xff0c;实现一个…

南卡、漫步者和Oladance开放式耳机哪个强!无广甄选测评!

在当前市场上&#xff0c;因为许多质量不行&#xff0c;音质平平的开放式耳机让消费者的选择陷入了困难。这些品质低下的产品既无法提供优秀的音频享受&#xff0c;长期佩戴还可能对使用者的听力健康造成健康问题。 作为一名经验丰富的音频设备评测专家&#xff0c;我建议在选…