1、Vue生命週期
vue實例中從建立到銷燬的過程,稱之爲生命週期,共有八個階段。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue的生命週期</title>
<script type="text/javascript" src="js/vue.min.js"></script>
<script type="text/javascript"> window.onload = function(){ new Vue({ el:'#itany', data:{ msg:'你好啊' }, methods:{ update(){ this.msg='歡迎'; }, destroy(){ this.$destroy(); } }, beforeCreate(){ alert('組件實例剛剛建立,還未進行數據的觀測和事件的配置'); }, create(){ alert('組件實例已經建立完成,而且已經進行數據的觀測和事件配置'); }, beforeMount(){ alert('模板編譯以前,尚未掛載'); }, mounted(){ alert('模板編譯以後,已經掛載,此時纔會渲染頁面,才能看到頁面上數據的展現'); }, beforeUpdate(){ alert('組件數據更新以前'); }, updated(){ alert('組件更新以後'); }, beforeDestroy(){ alert('組件銷燬以前'); }, destroyed(){ alert('組件銷燬以後'); } }) } </script>
</head>
<body>
<div id="itany">
{{msg}}
<button @click="update">點擊</button>
<button @click="destroy">點擊銷燬</button>
</div>
</body>
</html>
複製代碼

2、 計算屬性
1.基本用法
計算屬性也是用來存儲數據的,可是有如下幾個特色。
a.數據能夠進行邏輯處理操做的
b.能夠對計算屬性中的數據進行監視
複製代碼
2.計算屬性 vs 方法
將計算屬性的get函數定義爲一個方法也能夠實現相似的功能
區別:
a.計算屬性是基於它的依賴進行更新的,只有在相關依賴發生改變時才能更新變化
b.計算屬性是緩存的,只有相關依賴沒有改變,屢次訪問計算屬性獲得的值是以前緩存的計算結果,不會屢次執行。
複製代碼
3.get和set
計算屬性由兩部分組成,get和set,分別用來獲取計算屬性和設置計算屬性;
默認只有get,若是須要set,要本身添加。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>計算屬性</title>
<script type="text/javascript" src="js/vue.min.js"></script>
</head>
<body>
<div id="itany">
{{msg}}
<br>
{{msg2}}
<br>
{{msg.split('').reverse().join('')}}
<br>
{{msg3}}
<br>
<button @click="changemsg">修改msg值</button>
<br>
{{num1}}
<br>
num2:
{{num2}}
<br>
{{getnum2()}}
<br>
<button onclick="a()">測試</button>
<br>
<button @click="change()">修改計算屬性</button>
</div>
</body>
</html>
<script type="text/javascript"> var vm = new Vue({ el:'#itany', data:{ msg:'weloome to itany', num1:7 }, computed:{ msg2:function(){ return '歡迎來到北京' }, msg3:function(){ return this.msg.split('').reverse().join(''); }, num2:{ get:function(){ console.log(new Date()); return this.num1-1; }, set:function(val){ this.num1 = 1111; } } }, methods:{ changemsg(){ this.num1 = 666; }, getnum2(){ console.log(new Date()); return this.num1-1; }, change(){ this.num2=11; } } }) function a(){ setInterval(function(){ console.log(vm.getnum2()) },1000) } </script>
複製代碼
3、vue實例的屬性和方法
1.屬性
vm.$el
vm.$date
vm.$options
複製代碼
2.方法
vm.$mount();
vm.$destroy();
vm.$nextTick();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript" src="js/vue.min.js"></script>
</head>
<body>
<div id="itany">
{{msg}}
<h2 ref="hh">標題:{{name}}</h2>
<h2 ref="hello">你好1</h2>
<h2 ref="world">你好2</h2>
</div>
<script type="text/javascript"> var vm = new Vue({ data:{ msg:'11', name:'tom' } }).$mount('#itany'); vm.name = "222333"; vm.$nextTick(function(){ console.log(vm.$refs.hh.textContent); }) </script>
</body>
</html>
vm.$set();
vm.$delete();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript" src="js/vue.min.js"></script>
</head>
<body>
<div id="itany">
<button @click="doUpdate">修改屬性</button>
<button @click="doAdd">添加屬性</button>
<button @click="doDelete()">刪除屬性</button>
<div>{{user.name}}</div>
<div>{{user.age}}</div>
</div>
<script type="text/javascript"> var vm = new Vue({ el:'#itany', data:{ user:{ id:'1001', name:"tom", age:'1' } }, methods:{ doUpdate(){ this.user.name='tom1'; }, doAdd(){ if(this.user.age){ ++this.user.age; }else{ Vue.set(this.user,'age',46); } console.log(this.user); }, doDelete(){ if(this.user.age){ Vue.delete(this.user,'age'); }else{ } } } }) </script>
</body>
</html>
vm.$watch();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>監視數據的變化,使用$watch</title>
<script type="text/javascript" src="js/vue.min.js"></script>
<script type="text/javascript"> window.onload = function(){ var vm = new Vue({ el:'#itany', data:{ name:'tom', age:'23', user:{ id:'1001', name:'uu' } }, watch:{ age:(newVal,oldVal) => { console.log('name被修改了old:'+oldVal); console.log('name被修改了new:'+newVal); }, user:{ handler:(newVal,oldVal)=>{ console.log('user被修改了old:'+oldVal.name); console.log('user被修改了new:'+newVal.name); }, deep:true } } }) } </script>
</head>
<body>
<div id="itany">
<input type="text" name="" v-model="name">
<h1>{{name}}</h1>
<br>
<input type="text" name="" v-model="age">
<h1>{{age}}</h1>
<br>
<input type="text" name="" v-model="user.name">
{{user.name}}
</div>
</body>
</html>複製代碼