实现一个透明度来回变化的效果。
缺点:代码有点割裂,代码尽量写在Vue实例里面,全局配置可以写在外面。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>引出生命周期title>
<script src="../js/vue.js">script>
head>
<body>
<div id="root">
<h2 :style="{opacity}">欢迎学习Vueh2>
div>
body>
<script>
Vue.config.productionTip = false
const vm = new Vue({
el:'#root',
data:{
opacity:1,
},
})
// 通过外部的定时器实现
setInterval(()=>{
vm.opacity -= 0.01
if(vm.opacity <= 0) vm.opacity=1
},16)
script>
html>
methods中使用事件回调不可取,不符合需求。
此时,data中数据变化,重新解析模板,每个重新解析,又会再次调用开启定时器,如此一来,会极大消耗资源,并且屏幕出现鬼畜效果。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7uakwmN2-1659269367736)(2022-07-31-18-15-12.png)]
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>引出生命周期title>
<script src="../js/vue.js">script>
head>
<body>
<div id="root">
<h2 :style="{opacity}">欢迎学习Vueh2>
{{change()}}
div>
body>
<script>
Vue.config.productionTip = false
const vm = new Vue({
el:'#root',
data:{
opacity:1,
},
methods:{
change(){
setInterval(()=>{
console.log("change")
this.opacity -= 0.01
if(this.opacity <= 0) vm.opacity=1
},16)
}
}
})
script>
html>
Vue完成模板的解析并把初始的真实DOM元素放入雅页面后(挂在完毕)调用 mounted,只调用了一次,开启了一个定时器。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YSD7FoWV-1659269367739)(2022-07-31-18-20-12.png)]
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>引出生命周期title>
<script src="../js/vue.js">script>
head>
<body>
<div id="root">
<h2 :style="{opacity}">欢迎学习Vueh2>
div>
body>
<script>
Vue.config.productionTip = false
const vm = new Vue({
el:'#root',
data:{
opacity:1,
},
// Vue完成模板的解析并把初始的真实DOM元素放入雅页面后(挂在完毕)调用 mounted
mounted(){
console.log("mounted")
setInterval(()=>{
this.opacity -= 0.01
if(this.opacity <= 0) vm.opacity=1
},16)
},
})
script>
html>
总结:
生命周期:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ETs206ms-1659269367740)(./lifecycle.png)]
vm销毁后 原生回调好使
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MUUDH71A-1659269367742)(2022-07-31-18-30-09.png)]
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>分析生命周期title>
<script src="../js/vue.js">script>
head>
<body>
<div id="root">
<h2>当前的n值是{{n}}h2>
<button @click="add">点我n+1button>
<button @click="bye">点我销毁vmbutton>
div>
body>
<script>
Vue.config.productionTip = false
const vm = new Vue({
el:'#root',
// // template全部替换el指向元素,的有一个根元素
// template:`
//
// 当前的n值是{{n}}
//
//
// `,
data:{
n:1
},
methods:{
add(){
this.n++
},
bye(){ // vm销毁后 原生回调好使
console.log("bye")
this.$destroy()
}
},
beforeCreate() {
// 此时vue中没有数据,还没绑定,vm实例中没有_data和n
console.log("beforeCreate")
// console.log(this) // Vue
// debugger
},
created() {
// 此时vue实例上有了_data和n及其getset
console.log("created")
// console.log(this)
// debugger
},
beforeMount() {
// 这里边操作DOM无效
console.log("beforeMount")
// console.log(this)
// // debugger
// document.querySelector('h2').innerText = '哈哈'
},
mounted() {
console.log("mounted")
// console.log(this)
// // 对DOM操作有效
// document.querySelector('h2').innerText = '哈哈'
// debugger
},
beforeUpdate() { //页面和数据未同步
console.log("beforeUpdate")
// console.log(this.n)
// debugger
},
updated() { //页面和数据同步
console.log("updated")
// console.log(this.n)
// debugger
},
beforeDestroy() { // 到了这个阶段 设计数据更新不会再起到效果
console.log("beforeDestroy")
},
destroyed() {
console.log("destroyed")
},
})
script>
html>
beforeUpdate//页面和数据未同步
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RlAKU0vZ-1659269367744)(2022-07-28-11-20-30.png)]
updated//页面和数据同步
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9xAhfevZ-1659269367747)(2022-07-28-11-24-41.png)]
vm的一生(vm的生命周期):
常用的生命周期钩子及常用功能:
常用的生命周期钩子及常用功能: