day06 vue生命周期 组件实例上的属性

单词:
update:更新
mount:挂载 安装
unmount:卸载
destory: 破坏 (这里用作卸载)

1.1vue2/vue3在事件传值通信区别
Vue3组件之间的事件传值

  • 父子之间:子传父(通过事件,携带了参数)
  • 兄弟之间:借助父组件,借助prop传值

Vue2–事件总线 b u s ( v m 对象 − − 全局 ) − − V u e . p r o p t y p e . bus(vm对象--全局)-- Vue.proptype. bus(vm对象−−全局)−−Vue.proptype.bus=vm对象

  • 定义全局 b u s ,通过 bus,通过 bus,通过bus.on(‘事件名’,事件内容)
  • 组件派发事件($emit),数据被全局拿到,实现共享
  • 不再限制组件关系
  • $bus.on是绑定事件 $bus.emit()派发事件 $bus.off()是解绑事件
    面试题:Vue3中如何实现类似Vue2中的事件总线通讯:通过引入mitt库实现
//Vue2创建对象
new Vue({选项API;
}).$mount("#app");//Vue3创建对象
createApp({选项API或组合式API;
}).mount("#app");

1.2 生命周期

生命周期:就是一个从开始到结束的过程,对应哪个时间点做什么事情
例:生活中,一棵树的春天(-发芽,长新叶-)
一棵树的夏天(-新叶已经长齐,枝繁叶茂-)
一棵树的秋天(-叶子变黄–硕果累累-)
一棵树的冬天(-叶子飘落,万般皆寂静-)
提炼:不同时期做不同的事情,周而复始

1.2.1 Vue2中的生命周期函数

Vue2生命周期函数(也称为生命周期钩子):
4个阶段(创建,挂载,更新,卸载),8个函数—在不同的阶段,会自动调用

  • 创建,创建阶段一般向后台发请求准备数据–是否在挂载之前
  • 挂载,将内容挂载到对应的元素上显示。**注意:**父组件先创建,再执行beforeMount,子组件开始创建和挂载,父组件再挂载完成(mounted)
  • 更新,data中的数据更新时触发,v-if若导致元素消失(不会触发destroy)
  • 卸载。表示组件移除。vm. d e s t r o y ( ) 方法可以卸载组件,但只是在 V u e 2 中, V u e 3 中已经去除 destroy()方法可以卸载组件,但只是在Vue2中,Vue3中已经去除 destroy()方法可以卸载组件,但只是在Vue2中,Vue3中已经去除destroy()方法

1.2.2 Vue3中的生命周期函数

在选项式API中,Vue3中和Vue2比较,换了2个单词:

  • Vue2中destroy换成了unmount(卸载),含义一样
    在组合式API中,Vue3中的setup()函数实际上表示了创建阶段

1.3 组件实例上的属性$refs

组件实例上的方法和属性,都是"$"开头

  • $refs是组件实例上的属性,是一个对象,里面包含了当前组件中有ref属性的所有dom元素
  • $refs的使用—在js中输出的,在视图层添加ref属性作为元素的标识

1.4 组件实例上的属性 e l , el, el,parent, r o o t , root, root,data, a t t r s , attrs, attrs,nextTick()

  • e l 输出的是一个 d o m 节点, el输出的是一个dom节点, el输出的是一个dom节点,parent是当前组件的父组件实例
  • $root:当前组件树的根组件实例。如果当前实例没有父组件,那么这个值就是它自己。
  • d a t a : data: data:data中是组件实例返回的数据,这个数据被Proxy包裹
  • $attrs(attr:attribute属性),
    场景:父给子通过prop传值,子通过props接收,若有多层,逐级传递麻烦,就有了属性透传的必要性
<!-- v-bind="$attrs"表示将父级属性透传 -->
<Child v-bind="$attrs"></Child>
  • $nextTick()是组件实例上的方法
    Vue是声明式的,先说要怎么做,声明好之后再操作DOM: 注意DOM的更新是异步的。
    $nextTick()是等DOM加载完成更新后,获取相关的值(最新的DOM值)

1.5 teleport

teleport 是传送的意思,是一个标记,标记内是要传送的内容

<!-- to属性表示要传送到哪里,to="body"表示传送给body元素,注意teleport标记在调试工具中是不显示的 -->
<teleport to='body'><div>这里是传送的内容           </div>
</teleport>

Vue2生命周期

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vue2生命周期</title>
</head>
<body><div id="app"><!-- 使用组件在这里写 -->{{data}}<!-- 定义按钮--改变data --><button @click="changeData">更新data</button><!-- 测试某个元素的v-show是否引起生命周期函数的触发 --><!-- <div id="content" v-show="flag">{{data}}</div> --><!-- 测试某个元素的v-if是否引起生命周期函数的触发 --><div id="content" v-if="flag">{{data}}</div><hr><!-- 子组件 --><Com01></Com01></div><!-- 组件的视图层的定义 --><template id="com1" ><!-- 这个div在vue2中必须要加,vue3中可以不加 --><div v-if="flag1"><p >组件1</p><button @click="show">显示状态的切换</button></div></template><script src="./lib/vue.global.js"></script><script>// 组件的数据层的定义const Com01 = {template:'#com1',data(){return{flag1:true}},methods:{show(){this.flag1=false;}},beforeCreate() {console.log("子组件创建之前");},created() {console.log("子组件创建之后");},beforeMount() {console.log("子组件挂载之前");},mounted() {console.log("子组件挂载后");},beforeUpdate() {console.log("子组件数据更新前");},updated() {console.log("子组件数据更新后");},beforeDestroy() {console.log("子组件卸载前");},destroyed() {console.log("子组件已经卸载");}};const {createApp} = Vue;const app =createApp({data(){return {data:'hello--生命周期',flag:true}},methods: {// 改变数据changeData(){this.data="你好,2217";this.flag=false;}},components:{//局部注册Com01},beforeCreate() {console.log("父组件创建之前");},created() {console.log("父组件创建之后");},beforeMount() {console.log("父组件挂载之前");},mounted() {console.log("父组件挂载后");},beforeUpdate() {console.log("父组件数据更新前");},updated() {console.log("父组件数据更新后");},beforeDestroy() {console.log("父组件组件卸载前");},destroyed() {console.log("父组件组件已经卸载");},})app.mount("#app");</script>
</body>
</html>

Vue3 生命周期
vue2和vue3的生命周期就是卸载前后不一样
vue2是 卸载前:beforeDestory 卸载后destoryed
vue3是 卸载前:beforeUnmount 卸载后unmounted

 beforeUnmount() {console.log("父组件组件卸载前");},unmounted() {console.log("父组件组件已经卸载");}

1.生命周期函数有哪些(Vue2和Vue3生命周期钩子的不同)

就是在卸载前后的钩子不同
vue2是 卸载前:beforeDestory 卸载后destoryed
vue3是 卸载前:beforeUnmount 卸载后unmounted

2.父子组件的加载过程

父组件创建之前
父组件创建之后
父组件挂载之前
子组件创建之前
子组件创建之后
子组件挂载之前
子组件挂载后
父组件挂载后

3.Vue2事件总线说明

            beforeCreate(){console.log('父组件创建之前');},created(){console.log('父组件创建之后');},beforeMount(){console.log('父组件挂载之前');},mounted(){console.log('父组件挂载之后');},beforeUpdate(){console.log('父组件数据更新前');},updated(){console.log('父组件数据更新后');},beforeUnmount(){console.log('父组件组件卸载前');},unmounted(){console.log('父组件组件已经卸载');}

4.Proxy的使用复习

proxy代理是解决开发环境中的跨域问题,正式环境的跨域需要使用nginx反向代理或者是后端解决
有三个
[[Handler]]:Object
[[Target]] :Object
[[IsRevoked]]:false

5.组件的内置属性和方法

e l 输出 el 输出 el输出el–el:element–当前组件的dom
$parent
父组件实例–输出
$root
根组件实例–没有父组件就是自己
$data
从 data 选项函数中返回的对象,会被组件赋为响应式。组件实例将会代理对其数据对象的属性访问。
a t t r s 子组件加了 attrs 子组件加了 attrs子组件加了attrs后,可以拿到父组件的属性了
$refs
$refs是组件实例的属性–在js中可以通过“.”调用
在html中,加在对应的标记内,ref有参考i的意思,这里可以作为标识
$nextTick()
根组件实例–没有父组件就是自己

day06 生命周期相关推荐

  1. LTV 即用户生命周期价值

    20220321 https://mp.weixin.qq.com/s/kPoojfRCbvCCV4zpnCimmQ 指标计算详细介绍 数据分析|如何做好用户生命周期价值分析 LTV https:// ...

  2. Harmony生命周期

    Harmony生命周期 系统管理或用户操作等行为,均会引起Page实例在其生命周期的不同状态之间进行转换.Ability类提供的回调机制能够让Page及时感知外界变化,从而正确地应对状态变化(比如释放 ...

  3. Activity在有Dialog时按Home键的生命周期

    当一个Activity弹出Dialog对话框时,程序的生命周期依然是onCreate() - onStart() - onResume(),在弹出Dialog的时候并没有onPause()和onSto ...

  4. 横竖屏切换时Activity的生命周期

    1.不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏执行一次,切竖屏执行两次. 2.设置Activity的android:configChang ...

  5. Android中Service生命周期、启动、绑定、混合使用

    一.Activity和Service如何绑定: 1.Service和Activity之间的连接可以用ServiceConnection来实现.实现一个ServiceConnection对象实例,重写o ...

  6. Cocos生命周期回调

    Cocos Creator 为组件脚本提供了生命周期的回调函数.用户只要定义特定的回调函数,Creator 就会在特定的时期自动执行相关脚本,用户不需要手工调用它们. 目前提供给用户的生命周期回调函数 ...

  7. Fragment 使用 replace 的方式实现切换 以及切换的时候Fragment 生命周期

    这个主要代码在activity里面 如下 public class ReplaceActivity extends AppCompatActivity implements View.OnClickL ...

  8. Fragment 使用 show 和 hide 的方式实现切换 以及切换的时候Fragment 生命周期

    实现的效果如下图 主要的代码在activity 这里贴出来了 public class ShowActvity extends AppCompatActivity implements View.On ...

  9. ViewPager与Fragment结合使用,以及切换的时候Fragment 的生命周期

    下面要做的效果图下图 首先我们创建一个适配器如下 public class FraPagerAdapter extends FragmentPagerAdapter {private List< ...

最新文章

  1. Flink1.4.0连接Kafka0.10.2时遇到的问题
  2. Ubuntu常见问题配置
  3. 第四天2017/03/31(下午1:结构体、数组)
  4. SQL Server 统计信息更新时采样百分比对数据预估准确性的影响
  5. linux远程调用的脚本在ssh时报错,linux:ssh远程调用tomcat脚本时候出错
  6. 韭菜翻盘致富!加拿大学者发布比特币的价格预测模型
  7. Linux内核:进程上下文切换
  8. 初学者python笔记(内置函数_1)
  9. Linux入门——开机启动过程浅析
  10. DOS命令tree的用法
  11. Mac下载m3u8视频
  12. 开源视频服务器软件MJPG-streamer研究
  13. 重磅长文!先进院李骁健等人:在体神经界面技术的发展-从小到大规模记录
  14. iconfont下载的本地文件的ttf、woff、woff2转换成base64位后引入iconfont.css使用
  15. python获取arduino数据可视化_Arduino数据可视化在实验教学中的应用
  16. 什么叫工业4.0,这篇接地气的文章终于讲懂了
  17. 求n的阶乘及1~n的阶乘之和
  18. 内网安装视频会议软件有几个步骤?
  19. 凝思虚拟机与主机ping不通
  20. 在SpringBoot中使用【阿里云OSS对象存储】存取图片

热门文章

  1. Python攻城师的成长————面向对象的三大特征(继承、多态)
  2. 助力全球抗疫:3D突发公共卫生事件管理平台
  3. 【计算机毕业设计】springboot vue 社区卫生医疗管理系统
  4. D16-04 匿名函数
  5. Android项目升级到Android12报错集合
  6. cloudstack java api_python访问cloudstack的api接口
  7. 科学家发现了新的肉食恐龙
  8. Alibaba开源UI框架V-Layout
  9. vue在新页面打开docx文件
  10. Java并发编程实战之互斥锁