1. 程式人生 > >Vue學習筆記3.2-生命週期函式(順帶記錄Vue的例項的生命週期)

Vue學習筆記3.2-生命週期函式(順帶記錄Vue的例項的生命週期)

Vue生命週期函式有beforeCreate、created、beforeMount、Mounted、beforeUpdate、updated、beforeDestroy、destroyed、activated、deactivated、errorCaptured。共11個。本文直說前8個,另外3個以後再說

 

首先要說明下 什麼是生命週期函式:

生命週期函式就是指在某一個特定時間節點會自動執行的函式。

1. beforeCreate:

beforeCreate是在Vue例項初始化事件後執行的。

<!DOCTYPE html>
<html>
<head>
	<title>生命週期函式</title>
	<script src="vue.js"></script>
</head>
<body>
	<div id="app">Hello World</div>
</body>
<script type="text/javascript">
	var vm = new Vue({
		el: "#app",
		beforeCreate: function() {
			console.log('beforeCreate');
		}
	})
</script>
</html>

2.created: 在Vue例項完成了內部程式碼和外部程式碼的初始化之後執行 

<script type="text/javascript">
	var vm = new Vue({
		el: "#app",
		beforeCreate: function() {
			console.log('beforeCreate');
		},
		created: function() {
			console.log('created');
		}
	})
</script>

3.當例項初始化事件程式碼後開始檢測是否有‘el’引數。如果有則繼續檢測是否有'template'引數,如果沒有‘el’引數。就坐等vm.$mount(el)執行。

4.檢測是否有“template”引數 如果有就使用template中的模板。如果沒有,就把掛載點作為模板使用,也就是上面例項的<div id="app">HelloWorld</div>

<!DOCTYPE html>
<html>
<head>
	<title>生命週期函式</title>
	<script src="vue.js"></script>
</head>
<body>
	<div id="app"></div>
</body>
<script type="text/javascript">
	var vm = new Vue({
		el: "#app",
		template: "<div>HelloWorld</div>",
		beforeCreate: function() {
			console.log('beforeCreate');
		},
		created: function() {
			console.log('created');
		}
	})
</script>
</html>

5.在將模板渲染到顯示頁面上之前會執行beforeMount:

<script type="text/javascript">
	var vm = new Vue({
		el: "#app",
		template: "<div>HelloWorld</div>",
		beforeCreate: function() {
			console.log('beforeCreate');
		},
		created: function() {
			console.log('created');
		},
		beforeMount: function() {
			console.log('beforeMount');
		}
	})
</script>

6.mounted:

在模板渲染到前端頁面之後執行mounted

可以來做一個試驗 

<body>
	<div id="app"></div>
</body>
<script type="text/javascript">
	var vm = new Vue({
		el: "#app",
		template: "<div>HelloWorld</div>",
		beforeCreate: function() {
			console.log('beforeCreate');
		},
		created: function() {
			console.log('created');
		},
		beforeMount: function() {
			console.log(this.$el);
		},
		mounted: function(){
			console.log(this.$el);
		}
	})
</script>

7.beforeDestroy和destroyed

beforeDestroy在Vue例項的生命週期結束前執行

destroyed在Vue例項的生命週期結束後執行。

這兩個函式一般不會自動執行。需要通過執行vm.$destroy()時才會執行(類似C++ 的釋放堆空間操作)

<script type="text/javascript">
	var vm = new Vue({
		el: "#app",
		template: "<div>HelloWorld</div>",
		beforeCreate: function() {
			console.log('beforeCreate');
		},
		created: function() {
			console.log('created');
		},
		beforeMount: function() {
			console.log(this.$el);
		},
		mounted: function(){
			console.log(this.$el);
		},
		beforeDestroy: function() {
			console.log('beforeDestroy');
		},
		destroyed: function() {
			console.log('destroyed');
		}
	})
</script>

8.beforeUpdate和updated:

beforeUpdate是在資料改變之前執行。

updated實在資料改變後執行。

<script type="text/javascript">
	var vm = new Vue({
		el: "#app",
		data: {
			content: 'helloworld'
		},
		template: "<div>{{content}}</div>",
		beforeCreate: function() {
			console.log('beforeCreate');
		},
		created: function() {
			console.log('created');
		},
		beforeMount: function() {
			console.log(this.$el);
		},
		mounted: function(){
			console.log(this.$el);
		},
		beforeDestroy: function() {
			console.log('beforeDestroy');
		},
		destroyed: function() {
			console.log('destroyed');
		},
		beforeUpdate: function() {
			console.log('beforeUpdate');
		},
		updated: function() {
			console.log('updated');
		}
	})
</script>