天天看點

學習Vue筆記017- 生命周期

作者:CShap新勢力

引出生命周期:

1.生命周期又名:生命周期回調函數、生命周期函數、生命周期鈎子。

2.是什麼:Vue在關鍵時刻幫我們調用的一些特殊名稱的函數。

3.生命周期函數的名字不可更改,但函數的具體内容是程式員根據需求編寫的。

4.生命周期函數中的this指向是vm 或 元件執行個體對象。

<!-- 準備好一個容器-->
		<div id="root">
			<h2 v-if="a">你好啊</h2>
			<h2 :style="{opacity}">歡迎學習Vue</h2>
		</div>
<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在啟動時生成生産提示。
		
		 new Vue({
			el:'#root',
			data:{
				a:false,
				opacity:1
			},
			methods: {
				
			},
			//Vue完成模闆的解析并把初始的真實DOM元素放入頁面後(挂載完畢)調用mounted
			mounted(){
				console.log('mounted',this)
				setInterval(() => {
					this.opacity -= 0.01
					if(this.opacity <= 0) this.opacity = 1
				},16)
			},
		})

		//通過外部的定時器實作(不推薦)
		/* setInterval(() => {
			vm.opacity -= 0.01
			if(vm.opacity <= 0) vm.opacity = 1
		},16) */
	</script>           

完整生命周期

<body>
		<!-- 準備好一個容器-->
		<div id="root" :x="n">
			<h2 v-text="n"></h2>
			<h2>目前的n值是:{{n}}</h2>
			<button @click="add">點我n+1</button>
			<button @click="bye">點我銷毀vm</button>
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在啟動時生成生産提示。

		new Vue({
			el:'#root',
			// template:`
			// 	<div>
			// 		<h2>目前的n值是:{{n}}</h2>
			// 		<button @click="add">點我n+1</button>
			// 	</div>
			// `,
			data:{
				n:1
			},
			methods: {
				add(){
					console.log('add')
					this.n++
				},
				bye(){
					console.log('bye')
					this.$destroy()
				}
			},
			watch:{
				n(){
					console.log('n變了')
				}
			},
			beforeCreate() {
				console.log('beforeCreate')
			},
			created() {
				console.log('created')
			},
			beforeMount() {
				console.log('beforeMount')
			},
			mounted() {
				console.log('mounted')
			},
			beforeUpdate() {
				console.log('beforeUpdate')
			},
			updated() {
				console.log('updated')
			},
			beforeDestroy() {
				console.log('beforeDestroy')
			},
			destroyed() {
				console.log('destroyed')
			},
		})
	</script>           

總結生命周期

常用的生命周期鈎子:

1.mounted: 發送ajax請求、啟動定時器、綁定自定義事件、訂閱消息等【初始化操作】。

2.beforeDestroy: 清除定時器、解綁自定義事件、取消訂閱消息等【收尾工作】。

關于銷毀Vue執行個體

1.銷毀後借助Vue開發者工具看不到任何資訊。

2.銷毀後自定義事件會失效,但原生DOM事件依然有效。

3.一般不會在beforeDestroy操作資料,因為即便操作資料,也不會再觸發更新流程了。

<!-- 準備好一個容器-->
		<div id="root">
			<h2 :style="{opacity}">歡迎學習Vue</h2>
			<button @click="opacity = 1">透明度設定為1</button>
			<button @click="stop">點我停止變換</button>
		</div>

<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在啟動時生成生産提示。

		 new Vue({
			el:'#root',
			data:{
				opacity:1
			},
			methods: {
				stop(){
					this.$destroy()
				}
			},
			//Vue完成模闆的解析并把初始的真實DOM元素放入頁面後(挂載完畢)調用mounted
			mounted(){
				console.log('mounted',this)
				this.timer = setInterval(() => {
					console.log('setInterval')
					this.opacity -= 0.01
					if(this.opacity <= 0) this.opacity = 1
				},16)
			},
			beforeDestroy() {
				clearInterval(this.timer)
				console.log('vm即将駕鶴西遊了')
			},
		})

	</script>           

代碼摘錄于尚矽谷Vue學習課件