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

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

函数说明
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>

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

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

相关文章

MySQL Online DDL原理解读

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

Oracle 系列数据库使用 listagg去重,删除重复数据的几种方法

listagg聚合之后很多重复数据&#xff0c;下面是解决重复数据问题 案例表 create table "dept_tag_info" ( "tag_id" bigint not null, "tag_code" varchar(200), "tag_name" varchar(500), "tag_level" varchar(200), &…

2024【大模型】国内市场如何?程序员该何时入局?

1.市场形势 根据最新的市场研究报告&#xff0c;2023年中国的大模型市场呈现出显著的发展趋势和广阔的前景。以下是关于中国大模型市场的几个关键点&#xff1a; 市场规模和增长&#xff1a;2023年&#xff0c;中国AI大模型行业的市场规模达到了147亿元人民币&#xff0c;预计…

EasyGBS服务器和终端配置

服务器配置 修改easygbs.ini sip/host为本机IP&#xff0c;否则终端能登录&#xff0c;无法视频。 [sip] host192.168.3.190 终端用于登录的用户名和密码 default_usertest default_passwordtest1234 default_guest_userguest default_guest_passwordtest1234终端配置 关…

6.13--CSS

行内样式 <!DOCTYPE html> <html lang"en"> <head> <title>This is title</title> </head> <body> <p style"font-size: 16px; color: red;">大家好</p> </body> </html> 内部样式表…

python调用天气接口并解析json数据

""" 使用python调用请求 使用pip install requests安装requests """ import jsonimport requestsresp requests.get(urlhttps://apis.tianapi.com/tianqi/index,params{key: 4a9ce7c2516a223ewe323dwe323ew323eq1, city: 101020100, type: 1} )…

CLIP-guided Prototype Modulating for Few-shot Action Recognition

标题&#xff1a;基于CLIP引导的原型调制用于少样本动作识别 源文链接&#xff1a;CLIP-guided Prototype Modulating for Few-shot Action Recognition | International Journal of Computer Vision (springer.com)https://link.springer.com/article/10.1007/s11263-023-019…

C# WPF入门学习主线篇(二十九)—— 绑定到对象和集合

C# WPF入门学习主线篇&#xff08;二十九&#xff09;—— 绑定到对象和集合 在WPF中&#xff0c;数据绑定是开发动态和交互性用户界面的核心技术。通过数据绑定&#xff0c;我们可以轻松地将UI控件与后台的数据源连接起来&#xff0c;实现数据的自动更新和显示。在本篇文章中&…

iText7画发票PDF——小tips

itext7教程&#xff1a; 1、https://blog.csdn.net/allway2/article/details/124295097 2、https://max.book118.com/html/2017/0720/123235195.shtm 3、https://www.cnblogs.com/fonks/p/15090635.html 4、https://www.cnblogs.com/sky-chen/p/13026203.html 5、官方&#xff…

短视频矩阵工具有哪些?如何辨别是否正规?

随着短视频平台的持续火爆&#xff0c;搭建短视频矩阵成为各大品牌商家提高营销效果和完成流量变现的主要方式之一&#xff0c;类似于短视频矩阵工具有哪些等问题也在多个社群有着不小的讨论度。 而就短视频矩阵工具的市场现状而言&#xff0c;其整体呈现出数量不断增长&#x…

Mybatis中#和$的区别

在MyBatis中&#xff0c;#{} 和 ${} 是两种用于参数替换的占位符&#xff0c;但它们在处理方式和安全性上有所不同 #{} 预编译处理&#xff1a;MyBatis在处理#{}时&#xff0c;会将其中的内容作为参数进行预编译处理。这意味着MyBatis会生成一个PreparedStatement对象&#x…

Prometheus+Grafana监控MySQL

一、准备 grafana服务器&#xff1a;192.168.48.136Prometheus服务器&#xff1a;192.168.48.136被监控服务器&#xff1a;192.168.48.134、192.168.48.135查看时间是否同步 二、安装prometheus server 【2.1】安装 # 解压安装包 tar -zxvf prometheus-2.52.0.linux-amd64.t…

location.href = ‘welcome.html‘;报错 - Completed 406 NOT_ACCEPTABLE

巧妙解决方案&#xff0c;使用服务端进行redirect即可 。 package com.aliyun.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping;Controller public class RedirectController {GetMapping("/r…

华为云CodeArts API:API管理一体化平台 5月新特性上线啦!

CodeArts API是华为云API全生命周期管理一体化解决方案平台&#xff0c;支持开发者高效实现API设计、API开发、API测试、API托管、API运维、API变现的一站式体验。 通过以API契约为锚点&#xff0c;CodeArts API保证API各阶段数据高度一致&#xff0c;为开发者提供友好易用的A…

【kubernetes】k8s中包管理工具-----Helm 超详细解读

目录 一、Helm 1.1什么是 Helm 1.2Helm 有三个重要的概念 1.2.1Chart 1.2.2Repository&#xff08;仓库&#xff09; 1.2.3Release 1.3Helm3 与 Helm2 的区别 二、Helm 部署 2.1安装 helm 2.2命令补全 2.3使用 helm 安装 Chart 2.3.1添加常用的 chart 仓库 2.3.2…

数据结构 实验 2

题目一&#xff1a;遍历二叉树 一、实验目的 熟练掌握指针变量、链表的含义掌握二叉树的结构特性&#xff0c;以及二叉链表的存储方式的特点掌握用递归的方法处理二叉树的基本算法掌握二叉树的四种遍历方式&#xff08;先序、中序、后序、按层次&#xff09; 二、实验步骤 …

Linux C语言:字符串处理函数

一、字符串函数 1、C库中实现了很多字符串处理函数 #include <string.h> ① 求字符串长度的函数strlen② 字符串拷贝函数strcpy③ 字符串连接函数strcat④ 字符串比较函数strcmp 2、字符串长度函数strlen 格式&#xff1a;strlen(字符数组)功能&#xff1a;计算字符串…

Spring AI 接入OpenAI实现文字生成图片功能

Spring AI 框架集成的图片大模型 2022年出现的三款文生图的现象级产品&#xff0c;DALL-E、Stable Diffusion、Midjourney。 OpenAI dall-e-3dall-e-2 Auzre OpenAI dall-e-3dall-e-2 Stability stable-diffusion-v1-6 ZhiPuAI cogview-3 OpenAI 与 Auzer OpenAI 使用的图片…

接口自动化测试工程化——了解接口测试

什么是接口测试 接口测试也是一种功能测试 我理解的接口测试&#xff0c;其实也是一种功能测试&#xff0c;只是平时大家说的功能测试更多代指 UI 层面的功能测试&#xff0c;而接口测试更偏向于服务端层面的功能测试。 接口测试的目的 测试左移&#xff0c;尽早介入测试&a…