Vue構造器
<div class="app"> {{msg}} </div>
<script> //vue.js 組件其實都是被擴展的 vue實例。 var vm=new Vue({ //vue 實例 el:".app", data:{ msg:"hello vue.js" } }); // 響應式 //vm(構造器) 是 Vue 的實例 //vue 是 vm 的構造器 ( 構造函數) </script>
1){{msg}}會在視圖中顯示html
2){{msg}}在實例化後仍然保持數據響應vue
3){{msg}}儘管在console.log(data)中存在,但視圖卻找不到,且會報錯編程
4)所以請不要試圖在實例化後添加任何屬性api
實例屬性 方法以及生命週期
var data = { a : 1 } var vm = new Vue({ data : data }) vm.a === data.a // -> true // 設置屬性也會影響到原始數據 vm.a = 2 data.a // -> 2 // ... 反之亦然 data.a = 3 vm.a // -> 3
var data = { a : 1 } var vm = new Vue({ el : '#example' , data : data }) vm.$data === data // -> true vm.$el === document .getElementById( 'example' ) // -> true // $watch 是一個實例方法 vm.$watch( 'a' , function ( newVal, oldVal ) { // 這個回調將在`vm.a` 改變後調用 })
created(建立後)mounted(載入後)updated(更新後)d(銷燬後) estroyed(銷燬後)
<p v-once>{{message}}</p>
還能夠插入HTML使用指令v-html
Mustache{{}} 不能在 HTML 屬性中使用,應使用 v-bind 指令
<div id="app-2"> <p v-once>這裏的數據只會執行一次更新:{{me ssage}}</p> <div v-html="rawHtml">自定義html</div> </div>
var app2 = new Vue({ el:'#app-2', data:{ message:'第一次更新', rawHtml:'<ol><li>這裏是自定義html</li><li>這裏是自定義html</li></ol>' } }) app2.message = '第二次更新沒有賦值';
v-if、v-on、v-bind
指令(Directives)是帶有 v- 前綴的特殊屬性。指令屬性的值預期是單一 JavaScript 表達式(除了 v-for,以後再討論)。指令的職責就是當其表達式的值改變時相應地將某些行爲應用到 DOM 上。
{{ message | capitalize }}緩存
new Vue({ // 將message的值首字母變爲大寫,其它不變 filters: { capitalize: function (value) { if (!value) return '' value = value.toString() return value.charAt(0).toUpperCase() + value.slice(1) } } })
<!-- 完整語法 --> <a v-bind:href="url"></a> <!-- 縮寫 --> <a :href="url"></a>
<!-- 完整語法 --> <a v-on:click="doSomething"></a> <!-- 縮寫 --> <a @click="doSomething"></a>
<div id="app"> {{fullName}} <input v-model="firstName"/> <input v-model="lastName"/> </div> <script> var vm = new Vue({ el:'#app', data:{ firstName:"chao", lastName:"qiu", fullName:"qiuchao" }, computed:{ fullName:{ get:function(){ return this.lastName+this.firstName; } } }, methods:{ }, filters:{ }, watch:{ firstName:function(){ this.fullName=this.lastName+this.firstName; //return this.lastName+this.firstName; }, lastName:function(){ // return this.lastName+this.firstName; this.fullName=this.lastName+this.firstName; }, } }); </script>
計算屬性基於本身的依賴進行緩存,只要message沒發生變化,屢次訪問該計算屬性就會當即返回以前的計算結果,而沒必要再次執行函數;app
而method調用總會執行該函數。異步
都是用來處理某些數據隨其餘數據的變更而變更的,但儘可能不要濫用watch,若是代碼是命令式和重複的,先考慮下計算屬性computed,可以使代碼更簡潔。函數
<div id="app"> {{msg}} <input v-model="msg"/> </div> <script> var app = new Vue({ el:"#app", data:{ msg:"" }, watch:{ msg:function(newValue){ localStorage.getItem("msg",newValue); } }, mounted:function(){ this.msg = localStorage.getItem("msg"); } }); </script>