初識Vue

首先在html中導入Vue的js文件 可以下載vue.min.js或者使用cdn方法https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.8/vue.min.js

第二步: Hello Vue

效果:

vue將dom與數據建立連接 並且是響應式的: 在控制檯輸入app.message = 'helloword'  Enter

還有另一種方法:

<meta charset=utf-8>
<script src="../js/vue.min.js"></script>
<div id="app" style="color: red;font-weight: bold">
    {{message}}
</div>
<div id="app-2">
    <span v-bind:title="message">
        鼠標懸停幾秒鐘查看此處動態綁定的提示信息!
    </span>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            message: 'hello Vue!'
        }
    })
    var app2 = new Vue({
        el: '#app-2',
        data: {
            message: '頁面加載於 ' + new Date().toLocaleString()
        }
    })
</script>

帶有"v-"前綴的爲Vue指令 

v-bind:該指令的意思是:“將這個元素節點的 title 特性和 Vue 實例的 message 屬性保持一致”

v-once: 該指令表示該元素下的數據只更新一次(初始化那次)

v-html: {{}}的變量會顯示爲文本 該指令的值會解析爲html

v-if: 判斷該元素是否顯示

控制檯輸入app3.seen = false Enter 元素消失 (此外,Vue 也提供一個強大的過渡效果系統,可以在 Vue 插入/更新/移除元素時自動應用過渡效果)

v-for: 該指令可以綁定數組的數據來渲染一個項目列表

在控制檯裏,輸入 app4.todos.push({ text: '新項目' }),你會發現列表最後添加了一個新項目。

v-on: 該指令添加一個事件監聽器,通過它調用在 Vue 實例中定義的方法

     我們只修改狀態  將狀態對應到Dom的操作由Vue完成

v-model: 它能輕鬆實現表單輸入和應用狀態之間的雙向綁定

將一個變量顯示在兩處 在input修改message,p標籤的文本也會修改

第三步: 組件化應用構建

理解: 基於已有的html標籤 封裝自己的標籤

<div id="app-7">
  <ol>
    <!--
      現在我們爲每個 todo-item 提供 todo 對象
      todo 對象是變量,即其內容可以是動態的。
      我們也需要爲每個組件提供一個“key”,稍後再
      作詳細解釋。
    -->
    <todo-item
      v-for="item in groceryList"
      v-bind:todo="item" //todo爲自定義prop
      v-bind:key="item.id">
    </todo-item>
  </ol>
</div>
Vue.component('todo-item', {
  props: ['todo'], //自定義屬性數組
  template: '<li>{{ todo.text }}</li>' //將todo屬性的值與dom元素的樣式相連,使todo有實際意義
})

var app7 = new Vue({
  el: '#app-7',
  data: {
    groceryList: [
      { id: 0, text: '蔬菜' },
      { id: 1, text: '奶酪' },
      { id: 2, text: '隨便其它什麼人吃的東西' }
    ]
  }
})

     官方對組件化解釋: Vue 組件提供了純自定義元素所不具備的一些重要功能,最突出的是跨組件數據流、自定義事件通信以及構建工具集成。

vue實例的幾個知識點

一 實例初始化就存在的屬性對應值一旦改變Vue就會將其對應到Dom元素,初始化後加如的屬性沒有效果 還有:

<div id="app">
  <p>{{ foo }}</p>
  <!-- 這裏的 `foo` 不會更新! -->
  <button v-on:click="foo = 'baz'">Change it</button>
</div>

<script>
    var obj = {
      foo: 'bar'
    }

    Object.freeze(obj)

    new Vue({
      el: '#app',
      data: obj
    })
</script>

二 Vue實例屬性與用戶自定義屬性用$區分

var data = { a: 1 }
    var vm = new Vue({
        el: '#example',
        data: data
    })
    console.log("vm.data: "+vm.data);
    console.log("vm.$data: "+vm.$data);
    console.log("vm.el: "+vm.el);
    console.log("vm.$el: "+vm.$el);

效果:

        

三 實例生命期鉤子

理解: 實例的幾種狀態切面

Vue 實例生命週期                       

   有 created,mounted,updated,destored (都是動詞的過去式) 官方提醒:不要將這些屬性的值與箭頭函數() =>綁定

第四步: 語法瞭解

 一 {{}}與指令的的值可以爲變量(如上:''message")與表達式(單目,雙目,三目連接的運算或message.split('').reverse().join('')) 

二 修飾符:例如 .prevent 修飾符告訴 v-on 指令對於觸發的事件調用event.preventDefault()(阻止元素該事件的默認行爲)

<form v-on:submit.prevent="onSubmit">...</form>

還有.stop停止冒泡 .self該事件不接受冒泡或捕獲的觸發 .Middle點擊鼠標中鍵才觸發 .once...等

三  縮寫 最常用的 "v-bind:" 可以縮寫爲":","v-on:"可以縮寫爲"@"(就這兩個)   

<a v-bind:href="url">...</a>
<a :href="url">...</a>

<a v-on:click="doSomething">...</a>
<a @click="doSomething">...</a>

第五步: 瞭解計算屬性與偵聽器   

一 基礎例子:

<div id="example">
  <p>Original message: "{{ message }}"</p>
  <p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
<script>
var vm = new Vue({
  el: '#example',
  data: {
    message: 'Hello'
  },
  computed: {
    // 計算屬性的 getter (後面有設置setter方法)
    reversedMessage: function () {
      // `this` 指向 vm 實例
      return this.message.split('').reverse().join('')
    }
  }
})
</script>

二 計算屬性(computed)與方法(methods)的比較   用方法實現上操作:

<p>Reversed message: "{{ reversedMessage() }}"</p>

// 在組件中
methods: {
  reversedMessage: function () {
    return this.message.split('').reverse().join('')
  }
}

計算屬性是屬性對應的值會存入緩存,當響應式依賴的數據(message)發生改變時 值會自動改變 其他時候不用計算直接調用 和其他鍵值對一樣   方法擇每次取值都會調用一次     

三 計算屬性與偵聽屬性    

watch(偵屬性)實現:

<div id="example">
  <p>Original message: "{{ message }}"</p>
  <p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
<script>
var vm = new Vue({
  el: '#example',
  data: {
    message: 'Hello',
    reversedMessage: ''
  },
  watch: {
    //鍵爲要偵聽的屬性,值爲回調函數或函數名
    message: function (val) {
      // `this` 指向 vm 實例
      this.reversedMessage = val.split('').reverse().join('')
    }
  }
})
</script>

對比: 當reversedMessage 由多個屬性(message1,message2..)動態決定時 watch的寫法就麻煩一些,當需要在數據變化時執行異步或開銷較大的操作時watch會好一點

四 setter方法

<div id="example">
  <p>Original message: "{{ message }}"</p>
  <p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
<script>
var vm = new Vue({
  el: '#example',
  data: {
    message: 'Hello'
  },
  computed: {
      fullName: {
        // getter
        get: function () {
          return this.firstName + ' ' + this.lastName
        },
        // setter
        set: function (newValue) {
          var names = newValue.split(' ')
          this.firstName = names[0]
          this.lastName = names[names.length - 1]
        }
  }
}
})
</script>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章