成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

VUE2.0學(xué)習(xí)筆記

pumpkin9 / 1608人閱讀

摘要:添加事件偵聽器時使用模式。只當(dāng)事件是從偵聽器綁定的元素本身觸發(fā)時才觸發(fā)回調(diào)。差別在哪里將特性名轉(zhuǎn)換為從開始支持語法糖,會擴(kuò)展成一個更新父組件綁定值的偵聽器。如果需要條件渲染多個元素,可以使用包裹。

1.前言 安裝

直接用

.png)

開發(fā)環(huán)境

vueTools

vscode【Vetur、Vue2 Snippets】

weboack

2.實例 聲明式渲染

{{ message }}
//js
var vm = new Vue({
  el: "#app",
  data: {
    message: "Hello Vue!"
  }
})
數(shù)據(jù)與方法

當(dāng)一個 Vue 實例被創(chuàng)建時,它向 Vue 的響應(yīng)式系統(tǒng)中加入了其 data 對象中能找到的所有的屬性。當(dāng)這些屬性的值發(fā)生改變時,視圖將會產(chǎn)生“響應(yīng)”,即匹配更新為新的值。

// 我們的數(shù)據(jù)對象
var data = { a: 1 }

// 該對象被加入到一個 Vue 實例中
var vm = new Vue({
  data: data
})

// 他們引用相同的對象!
vm.a === data.a // => true

// 設(shè)置屬性也會影響到原始數(shù)據(jù)
vm.a = 2
data.a // => 2

// ... 反之亦然
data.a = 3
vm.a // => 3

當(dāng)這些數(shù)據(jù)改變時,視圖會進(jìn)行重渲染。值得注意的是只有當(dāng)實例被創(chuàng)建時 data 中存在的屬性是響應(yīng)式的。也就是說如果你添加一個新的屬性,將不會觸發(fā)任何視圖的更新。如果你知道你會在晚些時候需要一個屬性,但是一開始它為空或不存在,那么你僅需要設(shè)置一些初始值。

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 (newValue, oldValue) {
  // 這個回調(diào)將在 `vm.a` 改變后調(diào)用
})
自身屬性和方法

vue實例自身暴露的屬性和方法通過前綴$來獲取

var data = { a: 1 }
var vm = new Vue({
  el: "#example",
  data: data
})

vm.$data === data // => true
vm.$el === document.getElementById("example") // => true
實例生命周期

每個 Vue 實例在被創(chuàng)建之前都要經(jīng)過一系列的初始化過程(生命周期)。在這個過程中會運行一些叫做生命周期鉤子的函數(shù),用戶可以在不同階段添加自己的代碼來做一些事情。

beforeCreate:在實例初始化之后,數(shù)據(jù)觀測 (data observer) 和 event/watcher 事件配置之前被調(diào)用。

created:在實例創(chuàng)建完成后被立即調(diào)用。在這一步,實例已完成以下的配置:數(shù)據(jù)觀測 (data observer),屬性和方法的運算,watch/event 事件回調(diào)。然而,掛載階段還沒開始,$el 屬性目前不可見。

beforeMount:在掛載開始之前被調(diào)用:相關(guān)的 render 函數(shù)首次被調(diào)用。

mounted:el 被新創(chuàng)建的 vm.$el 替換,并掛載到實例上去之后調(diào)用該鉤子。

beforeUpdate:數(shù)據(jù)更新時調(diào)用,發(fā)生在虛擬 DOM 重新渲染和打補丁之前。

updated:由于數(shù)據(jù)更改導(dǎo)致的虛擬 DOM 重新渲染和打補丁,在這之后會調(diào)用該鉤子

beforeDestroy:實例銷毀之前調(diào)用。在這一步,實例仍然完全可用。

destroyed:Vue 實例銷毀后調(diào)用。調(diào)用后,Vue 實例指示的所有東西都會解綁定,所有的事件監(jiān)聽器會被移除,所有的子實例也會被銷毀。

activated/deactivated:keep-alive 組件激活/停用時調(diào)用,

errorCaptured:當(dāng)捕獲一個來自子孫組件的錯誤時被調(diào)用。此鉤子會收到三個參數(shù):錯誤對象、發(fā)生錯誤的組件實例以及一個包含錯誤來源信息的字符串。此鉤子可以返回 false 以阻止該錯誤繼續(xù)向上傳播。

注意:

beforeCreate,created外的鉤子在服務(wù)器端渲染期間不被調(diào)用。

不要在選項屬性或回調(diào)上使用箭頭函數(shù),比如

//錯誤,會導(dǎo)致this不會指向Vue 實例
created: () => console.log(this.a)
vm.$watch("a", newValue => this.myMethod())
Vue對象的選項
var vm = new Vue({
  // 數(shù)據(jù)
  data: "聲明需要響應(yīng)式綁定的數(shù)據(jù)對象",
  props: "接收來自父組件的數(shù)據(jù)",
  propsData: "創(chuàng)建實例時手動傳遞props,方便測試props",
  computed: "計算屬性",
  methods: "定義可以通過vm對象訪問的方法",
  watch: "Vue實例化時會調(diào)用$watch()方法遍歷watch對象的每個屬性",
  // DOM
  el: "將頁面上已存在的DOM元素作為Vue實例的掛載目標(biāo)",
  template: "可以替換掛載元素的字符串模板",
  render: "渲染函數(shù),字符串模板的替代方案",
  renderError: "僅用于開發(fā)環(huán)境,在render()出現(xiàn)錯誤時,提供另外的渲染輸出",
  // 生命周期鉤子
  beforeCreate: "發(fā)生在Vue實例初始化之后,data observer和event/watcher事件被配置之前",
  created: "發(fā)生在Vue實例初始化以及data observer和event/watcher事件被配置之后",
  beforeMount: "掛載開始之前被調(diào)用,此時render()首次被調(diào)用",
  mounted: "el被新建的vm.$el替換,并掛載到實例上之后調(diào)用",
  beforeUpdate: "數(shù)據(jù)更新時調(diào)用,發(fā)生在虛擬DOM重新渲染和打補丁之前",
  updated: "數(shù)據(jù)更改導(dǎo)致虛擬DOM重新渲染和打補丁之后被調(diào)用",
  activated: "keep-alive組件激活時調(diào)用",
  deactivated: "keep-alive組件停用時調(diào)用",
  beforeDestroy: "實例銷毀之前調(diào)用,Vue實例依然可用",
  destroyed: "Vue實例銷毀后調(diào)用,事件監(jiān)聽和子實例全部被移除,釋放系統(tǒng)資源",
  // 資源
  directives: "包含Vue實例可用指令的哈希表",
  filters: "包含Vue實例可用過濾器的哈希表",
  components: "包含Vue實例可用組件的哈希表",
  // 組合
  parent: "指定當(dāng)前實例的父實例,子實例用this.$parent訪問父實例,父實例通過$children數(shù)組訪問子實例",
  mixins: "將屬性混入Vue實例對象,并在Vue自身實例對象的屬性被調(diào)用之前得到執(zhí)行",
  extends: "用于聲明繼承另一個組件,從而無需使用Vue.extend,便于擴(kuò)展單文件組件",
  provide&inject: "2個屬性需要一起使用,用來向所有子組件注入依賴,類似于React的Context",
  // 其它
  name: "允許組件遞歸調(diào)用自身,便于調(diào)試時顯示更加友好的警告信息",
  delimiters: "改變模板字符串的風(fēng)格,默認(rèn)為{{}}",
  functional: "讓組件無狀態(tài)(沒有data)和無實例(沒有this上下文)",
  model: "允許自定義組件使用v-model時定制prop和event",
  inheritAttrs: "默認(rèn)情況下,父作用域的非props屬性綁定會應(yīng)用在子組件的根元素上。當(dāng)編寫嵌套有其它組件或元素的組件時,可以將該屬性設(shè)置為false關(guān)閉這些默認(rèn)行為",
  comments: "設(shè)為true時會保留并且渲染模板中的HTML注釋"
});
3.模板語法

Vue.js 使用了基于 HTML 的模板語法,必須是合法的 HTML。在底層的實現(xiàn)上,Vue 將模板編譯成虛擬 DOM 渲染函數(shù)。

插值 文本

Message: {{ msg }}



這個將不會改變: {{ msg }}
HTML

Using v-html directive:

只對可信內(nèi)容使用 HTML 插值,絕不要對用戶提供的內(nèi)容使用插值。

特性

在插值中可以使用表達(dá)式,但只限簡單表達(dá)式。

{{ message.split("").reverse().join("") }}
指令

指令 (Directives) 是帶有 v- 前綴的特殊屬性。
指令的職責(zé)是,當(dāng)表達(dá)式的值改變時,將其產(chǎn)生的連帶影響,響應(yīng)式地作用于 DOM。

現(xiàn)在你看到我了

...
指令 預(yù)期/限制 作用
v-text string 文本插值
v-html string html插值
v-show any 條件顯示
v-if、v-else、v-else-if any 條件渲染
v-for Array/Object/number/string 列表渲染
v-on(@) Function/Inline Statement/Object 事件綁定
v-bind(:) any (with argument)/Object (without argument) 特性綁定
v-model 僅限/

Message is: {{ message }}

復(fù)選框


Checked names: {{ checkedNames }}
new Vue({
  el: "#example-3",
  data: {
    checkedNames: []
  }
})
//Checked names: [ "Jack", "John", "Mike" ]

單選按鈕



Picked: {{ picked }}
new Vue({
  el: "#example-4",
  data: {
    picked: ""
  }
})
//Picked: Two

選擇框

Selected: {{ selected }}
new Vue({
  el: "...",
  data: {
    selected: ""
  }
})
//Selected: B

為多選時則返回一個數(shù)組Selected: [ "A", "B" ]

值綁定

復(fù)選框

單選按鈕

選擇框的選項

修飾符

.lazy,默認(rèn)input事件觸發(fā),使用此修飾則改為change事件觸發(fā)


.number將輸入的值轉(zhuǎn)換為數(shù)值

.trim過濾掉輸入內(nèi)容的首尾空白字符

10.組件 簡介


組件 (Component) 是 Vue.js 最強大的功能之一。組件可以擴(kuò)展 HTML 元素,封裝可重用的代碼。組件是具有特殊功能的自定義元素。

所有的 Vue 組件同時也都是 Vue 的實例,所以可接受相同的選項對象 (除了一些根級特有的選項) 并提供相同的生命周期鉤子。

注冊組件 全局組件
//注意確保在初始化根實例之前注冊組件 // 注冊 Vue.component("my-component", { template: "
A custom component!
" })
局部組件
var Child = {
  template: "
A custom component!
" } new Vue({ // ... components: { // 將只在父組件模板中可用 "my-component": Child } })
自動注冊

webpack 的 vue cli3+

import Vue from "vue"
import upperFirst from "lodash/upperFirst"
import camelCase from "lodash/camelCase"

const requireComponent = require.context(
  // 其組件目錄的相對路徑
  "./components",
  // 是否查詢其子目錄
  false,
  // 匹配基礎(chǔ)組件文件名的正則表達(dá)式
  /Base[A-Z]w+.(vue|js)$/
)

requireComponent.keys().forEach(fileName => {
  // 獲取組件配置
  const componentConfig = requireComponent(fileName)

  // 獲取組件的 PascalCase 命名
  const componentName = upperFirst(
    camelCase(
      // 剝?nèi)ノ募_頭的 `"./` 和結(jié)尾的擴(kuò)展名
      fileName.replace(/^./(.*).w+$/, "$1")
    )
  )

  // 全局注冊組件
  Vue.component(
    componentName,
    // 如果這個組件選項是通過 `export default` 導(dǎo)出的,
    // 那么就會優(yōu)先使用 `.default`,
    // 否則回退到使用模塊的根。
    componentConfig.default || componentConfig
  )
})
注意

data必須是帶return的函數(shù)

如果將組件用于像

    、
      、

      以下類型模板無此限制:

      Prop

      父組件向子組件傳遞數(shù)據(jù)。

      Vue.component("child", {
        // 聲明 props
        props: ["message"],
        // 就像 data 一樣,prop 也可以在模板中使用
        // 同樣也可以在 vm 實例中通過 this.message 來使用
        template: "{{ message }}"
      })
      
      動態(tài) Prop:

      如果你想把一個對象的所有屬性作為 prop 進(jìn)行傳遞,可以使用不帶任何參數(shù)的 v-bind

      todo: {
        text: "Learn Vue",
        isComplete: false
      }
      
      //等價于
      
      字面量語法 vs 動態(tài)語法
      
      
      
      
      驗證

      為組件的 prop 指定驗證規(guī)則,會在組件實例創(chuàng)建之前進(jìn)行校驗。如果傳入的數(shù)據(jù)不符合要求,Vue 會發(fā)出警告。

      Vue.component("example", {
        props: {
          // 基礎(chǔ)類型檢測 (`null` 指允許任何類型)
          propA: Number,
          // 可能是多種類型
          propB: [String, Number],
          // 必傳且是字符串
          propC: {
            type: String,
            required: true
          },
          // 數(shù)值且有默認(rèn)值
          propD: {
            type: Number,
            default: 100
          },
          // 數(shù)組/對象的默認(rèn)值應(yīng)當(dāng)由一個工廠函數(shù)返回
          propE: {
            type: Object,
            default: function () {
              return { message: "hello" }
            }
          },
          // 自定義驗證函數(shù)
          propF: {
            validator: function (value) {
              return value > 10
            }
          }
        }
      })

      type 可以是下面原生構(gòu)造器String、Number、BooleanFunction、Object、Array、Symbol

      組件可以接收任意傳入的特性,這些特性都會被添加到組件的根元素上,且會做合并處理。

      自定義事件

      子組件向父組件傳遞數(shù)據(jù)。

      使用 $on(eventName) 監(jiān)聽事件

      使用 $emit(eventName) 觸發(fā)事件

      {{ total }}

      Vue.component("button-counter", {
        template: "",
        data: function () {
          return {
            counter: 0
          }
        },
        methods: {
          incrementCounter: function () {
            this.counter += 1
            this.$emit("increment")
          }
        },
      })
      
      new Vue({
        el: "#counter-event-example",
        data: {
          total: 0
        },
        methods: {
          incrementTotal: function () {
            this.total += 1
          }
        }
      })
      父子雙向通信

      .sync

      @update的語法糖

      
      this.$emit("update:foo", newValue)

      等價于

      
      this.$emit("update:foo", newValue)

      v-model(僅適用于表單輸入組件)

      v-on:inputv-bind:value的語法糖

      
      // 通過 input 事件帶出數(shù)值
      this.$emit("input", Number(formattedValue))

      等價于

      
      this.$emit("input", Number(formattedValue))
      非父子組件通信

      簡單場景bus.js

      var bus = new Vue()
      // 觸發(fā)組件 A 中的事件
      bus.$emit("id-selected", 1)
      // 在組件 B 創(chuàng)建的鉤子中監(jiān)聽事件
      bus.$on("id-selected", function (id) {
        // ...
      })

      注: 還可以使用$ref、$parent、$child進(jìn)行通信,不過不推薦。

      復(fù)雜的場景請使用vuex

      插槽

      為了讓組件可以組合,我們需要一種方式來混合父組件的內(nèi)容與子組件自己的模板。這個過程被稱為內(nèi)容分發(fā)。
      編譯作用域: 父組件模板的內(nèi)容在父組件作用域內(nèi)編譯;子組件模板的內(nèi)容在子組件作用域內(nèi)編譯。

      單個插槽

      除非子組件模板包含至少一個 插口,否則父組件的內(nèi)容將會被丟棄。當(dāng)子組件模板只有一個沒有屬性的插槽時,父組件傳入的整個內(nèi)容片段將插入到插槽所在的 DOM 位置,并替換掉插槽標(biāo)簽本身。

      最初在 標(biāo)簽中的任何內(nèi)容都被視為備用內(nèi)容。備用內(nèi)容在子組件的作用域內(nèi)編譯,并且只有在宿主元素為空,且沒有要插入的內(nèi)容時才顯示備用內(nèi)容。

      
      

      我是子組件的標(biāo)題

      只有在沒有要分發(fā)的內(nèi)容時才會顯示。

      我是父組件的標(biāo)題

      這是一些初始內(nèi)容

      這是更多的初始內(nèi)容

      我是父組件的標(biāo)題

      我是子組件的標(biāo)題

      這是一些初始內(nèi)容

      這是更多的初始內(nèi)容

      具名插槽

      元素可以用一個特殊的特性 name 來進(jìn)一步配置如何分發(fā)內(nèi)容。多個插槽可以有不同的名字。具名插槽將匹配內(nèi)容片段中有對應(yīng) slot 特性的元素。

      仍然可以有一個匿名插槽,它是默認(rèn)插槽,作為找不到匹配的內(nèi)容片段的備用插槽。如果沒有默認(rèn)插槽,這些找不到匹配的內(nèi)容片段將被拋棄。

      
      

      這里可能是一個頁面標(biāo)題

      主要內(nèi)容的一個段落。

      另一個主要段落。

      這里有一些聯(lián)系信息

      這里可能是一個頁面標(biāo)題

      主要內(nèi)容的一個段落。

      另一個主要段落。

      這里有一些聯(lián)系信息

      作用域插槽

      和普通的插槽對比,能夠傳遞數(shù)據(jù)。

      
      
      hello from parent hello from child
      動態(tài)組件

      通過使用保留的 元素,并對其 is 特性進(jìn)行動態(tài)綁定,你可以在同一個掛載點動態(tài)切換多個組件:

      var vm = new Vue({
        el: "#example",
        data: {
          currentView: "home"
        },
        components: {
          home: { /* ... */ },
          posts: { /* ... */ },
          archive: { /* ... */ }
        }
      })
      keep-alive

      把切換出去的組件保留在內(nèi)存中,保留其狀態(tài)或避免重新渲染

      
        
          
        
      
      注意事項

      組件復(fù)用性,松耦合

      謹(jǐn)慎使用ref

      在大型應(yīng)用中使用異步加載

      PascalCase聲明, kebab-case使用

      為遞歸組件添加name

      對低開銷的靜態(tài)組件使用 v-once

      11.過渡和動畫

      Vue 在插入、更新或者移除 DOM 時,提供多種不同方式的應(yīng)用過渡效果。

      單元素/組件的過渡

      適用場景:條件渲染 (使用 v-if)、條件展示 (使用 v-show)、動態(tài)組件、組件根節(jié)點

      hello

      new Vue({
        el: "#demo",
        data: {
          show: true
        }
      })
      .fade-enter-active, .fade-leave-active {
        transition: opacity .5s;
      }
      .fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
        opacity: 0;
      }
      過渡的類名

      v-enter:定義進(jìn)入過渡的開始狀態(tài)。在元素被插入時生效,在下一個幀移除。

      v-enter-active:定義過渡的狀態(tài)。在元素整個過渡過程中作用,在元素被插入時生效,在 transition/animation 完成之后移除。這個類可以被用來定義過渡的過程時間,延遲和曲線函數(shù)。

      v-enter-to: 2.1.8版及以上 定義進(jìn)入過渡的結(jié)束狀態(tài)。在元素被插入一幀后生效 (與此同時 v-enter 被刪除),在 transition/animation 完成之后移除。

      v-leave: 定義離開過渡的開始狀態(tài)。在離開過渡被觸發(fā)時生效,在下一個幀移除。

      v-leave-active:定義過渡的狀態(tài)。在元素整個過渡過程中作用,在離開過渡被觸發(fā)后立即生效,在 transition/animation 完成之后移除。這個類可以被用來定義過渡的過程時間,延遲和曲線函數(shù)。

      v-leave-to: 2.1.8版及以上 定義離開過渡的結(jié)束狀態(tài)。在離開過渡被觸發(fā)一幀后生效 (與此同時 v-leave 被刪除),在 transition/animation 完成之后移除。

      動畫

      動畫在css中使用animation即可,其他和過渡類似。

      自定義過渡的類名

      我們可以通過以下特性來自定義過渡類名:
      enter-class、enter-active-class、enter-to-class (2.1.8+)、leave-class、leave-active-class、leave-to-class (2.1.8+)

      hello

      設(shè)定持續(xù)時間
      ...
      ...
      JavaScript 鉤子
      
        
      
      // ...
      methods: {
        // --------
        // 進(jìn)入中
        // --------
      
        beforeEnter: function (el) {
          // ...
        },
        // 此回調(diào)函數(shù)是可選項的設(shè)置,done 是必須的 
        // 與 CSS 結(jié)合時使用
        enter: function (el, done) {
          // ...
          done()
        },
        afterEnter: function (el) {
          // ...
        },
        enterCancelled: function (el) {
          // ...
        },
      
        // --------
        // 離開時
        // --------
      
        beforeLeave: function (el) {
          // ...
        },
        // 此回調(diào)函數(shù)是可選項的設(shè)置,done 是必須的 
        // 與 CSS 結(jié)合時使用
        leave: function (el, done) {
          // ...
          done()
        },
        afterLeave: function (el) {
          // ...
        },
        // leaveCancelled 只用于 v-show 中
        leaveCancelled: function (el) {
          // ...
        }
      }
      初始渲染的過渡

      可以通過 appear 特性設(shè)置節(jié)點在初始渲染的過渡

      
      
        
      
      
      
        
      
      多個元素的過渡

      當(dāng)有相同標(biāo)簽名的元素切換時,建議給元素設(shè)置key。

      過渡模式

      in-out:新元素先進(jìn)行過渡,完成之后當(dāng)前元素過渡離開。

      out-in:當(dāng)前元素先進(jìn)行過渡,完成之后新元素過渡進(jìn)入。

      
        
      
      多個組件的過渡

      多個組件的過渡使用動態(tài)組件

      
      
        
      
      
      new Vue({
        el: "#transition-components-demo",
        data: {
          view: "v-a"
        },
        components: {
          "v-a": {
            template: "
      Component A
      " }, "v-b": { template: "
      Component B
      " } } })
      列表過渡

      使用 組件。

      它會以一個真實元素呈現(xiàn):默認(rèn)為一個 。你也可以通過 tag 特性更換為其他元素。

      內(nèi)部元素 總是需要 提供唯一的 key 屬性值

      {{ item }}

      組件還有一個特殊之處。不僅可以進(jìn)入和離開動畫,還可以改變定位。v-move 特性,它會在元素的改變定位的過程中應(yīng)用。

      
      
          
    1. {{ item }}
    2. .flip-list-move { transition: transform 1s; }

      也可以通過 move-class 屬性手動設(shè)置

      技巧

      創(chuàng)建可復(fù)用過度組件,將 或者 作為根組件

      
          
      

      動態(tài)過渡,通過動態(tài)綁定name實現(xiàn)

      
        
      
      12.可復(fù)用性和組合 混合

      混合 (mixins) 是一種分發(fā) Vue 組件中可復(fù)用功能的非常靈活的方式?;旌蠈ο罂梢园我饨M件選項。當(dāng)組件使用混合對象時,所有混合對象的選項將被混入該組件本身的選項。

      // 定義一個混合對象
      var myMixin = {
        created: function () {
          this.hello()
        },
        methods: {
          hello: function () {
            console.log("hello from mixin!")
          }
        }
      }
      
      // 定義一個使用混合對象的組件
      var Component = Vue.extend({
        mixins: [myMixin]
      })
      

      當(dāng)組件和混合對象含有同名選項時,這些選項將以恰當(dāng)?shù)姆绞交旌?。比如,同名鉤子函數(shù)將混合為一個數(shù)組,因此都將被調(diào)用。另外,混合對象的 鉤子將在組件自身鉤子 之前 調(diào)用 。

      值為對象的選項,例如 methods, components 和 directives,將被混合為同一個對象。兩個對象鍵名沖突時,取組件對象的鍵值對。

      Vue.extend() 也使用同樣的策略進(jìn)行合并。

      自定義指令

      除了核心功能默認(rèn)內(nèi)置的指令 (v-model 和 v-show),Vue 也允許注冊自定義指令。

      // 注冊一個全局自定義指令 `v-focus`
      Vue.directive("focus", {
        // 當(dāng)被綁定的元素插入到 DOM 中時……
        inserted: function (el) {
          // 聚焦元素
          el.focus()
        }
      })
      // 注冊一個局部自定義指令
      directives: {
        focus: {
          // 指令的定義
          inserted: function (el) {
            el.focus()
          }
        }
      }
      //使用
      
      鉤子函數(shù)

      一個指令定義對象可以提供如下幾個鉤子函數(shù) (均為可選):

      bind:只調(diào)用一次,指令第一次綁定到元素時調(diào)用。在這里可以進(jìn)行一次性的初始化設(shè)置。

      inserted:被綁定元素插入父節(jié)點時調(diào)用 (僅保證父節(jié)點存在,但不一定已被插入文檔中)。

      update:所在組件的 VNode 更新時調(diào)用,但是可能發(fā)生在其子 VNode 更新之前。指令的值可能發(fā)生了改變,也可能沒有。但是你可以通過比較更新前后的值來忽略不必要的模板更新 (詳細(xì)的鉤子函數(shù)參數(shù)見下)。

      componentUpdated:指令所在組件的 VNode 及其子 VNode 全部更新后調(diào)用。

      unbind:只調(diào)用一次,指令與元素解綁時調(diào)用。

      鉤子函數(shù)參數(shù)

      指令鉤子函數(shù)會被傳入以下參數(shù):

      el:指令所綁定的元素,可以用來直接操作 DOM 。

      binding:一個對象,包含以下屬性:

      name:指令名,不包括 v- 前綴。

      value:指令的綁定值,例如:v-my-directive="1 + 1" 中,綁定值為 2。

      oldValue:指令綁定的前一個值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。

      expression:字符串形式的指令表達(dá)式。例如 v-my-directive="1 + 1" 中,表達(dá)式為 "1 + 1"。

      arg:傳給指令的參數(shù),可選。例如 v-my-directive:foo 中,參數(shù)為 "foo"。

      modifiers:一個包含修飾符的對象。例如:v-my-directive.foo.bar 中,修飾符對象為 { foo: true, bar: true }。

      vnode:Vue 編譯生成的虛擬節(jié)點。移步 VNode API 來了解更多詳情。

      oldVnode:上一個虛擬節(jié)點,僅在 update 和 componentUpdated 鉤子中可用。

      渲染函數(shù) & JSX

      https://cn.vuejs.org/v2/guide...

      渲染函數(shù)render createElement
      // @returns {VNode}
      createElement(
        // {String | Object | Function}
        // 一個 HTML 標(biāo)簽字符串,組件選項對象,或者
        // 解析上述任何一種的一個 async 異步函數(shù),必要參數(shù)。
        "div",
      
        // {Object}
        // 一個包含模板相關(guān)屬性的數(shù)據(jù)對象
        // 這樣,您可以在 template 中使用這些屬性??蛇x參數(shù)。
        {
          // (詳情見下面的數(shù)據(jù)對象)
        },
      
        // {String | Array}
        // 子節(jié)點 (VNodes),由 `createElement()` 構(gòu)建而成,
        // 或使用字符串來生成“文本節(jié)點”。可選參數(shù)。
        [
          "先寫一些文字",
          createElement("h1", "一則頭條"),
          createElement(MyComponent, {
            props: {
              someProp: "foobar"
            }
          })
        ]
      )

      數(shù)據(jù)對象:

      {
        // 和`v-bind:class`一樣的 API
        "class": {
          foo: true,
          bar: false
        },
        // 和`v-bind:style`一樣的 API
        style: {
          color: "red",
          fontSize: "14px"
        },
        // 正常的 HTML 特性
        attrs: {
          id: "foo"
        },
        // 組件 props
        props: {
          myProp: "bar"
        },
        // DOM 屬性
        domProps: {
          innerHTML: "baz"
        },
        // 事件監(jiān)聽器基于 `on`
        // 所以不再支持如 `v-on:keyup.enter` 修飾器
        // 需要手動匹配 keyCode。
        on: {
          click: this.clickHandler
        },
        // 僅對于組件,用于監(jiān)聽原生事件,而不是組件內(nèi)部使用
        // `vm.$emit` 觸發(fā)的事件。
        nativeOn: {
          click: this.nativeClickHandler
        },
        // 自定義指令。注意,你無法對 `binding` 中的 `oldValue`
        // 賦值,因為 Vue 已經(jīng)自動為你進(jìn)行了同步。
        directives: [
          {
            name: "my-custom-directive",
            value: "2",
            expression: "1 + 1",
            arg: "foo",
            modifiers: {
              bar: true
            }
          }
        ],
        // Scoped slots in the form of
        // { name: props => VNode | Array }
        scopedSlots: {
          default: props => createElement("span", props.text)
        },
        // 如果組件是其他組件的子組件,需為插槽指定名稱
        slot: "name-of-slot",
        // 其他特殊頂層屬性
        key: "myKey",
        ref: "myRef"
      }
      過濾器

      過濾器可以用在兩個地方:雙花括號插值和 v-bind 表達(dá)式。

      
      {{ message | capitalize }}
      
      
      
      //定義局部過濾器
      filters: {
        capitalize: function (value) {
          if (!value) return ""
          value = value.toString()
          return value.charAt(0).toUpperCase() + value.slice(1)
        }
      }
      //定義全局過濾器
      Vue.filter("capitalize", function (value) {
        if (!value) return ""
        value = value.toString()
        return value.charAt(0).toUpperCase() + value.slice(1)
      })

      過濾器可以串聯(lián),依次執(zhí)行,前面的輸出作為后面一個的輸入。

      {{ message | filterA | filterB }}

      過濾器可以接收參數(shù)(管道符前面的值作為第一個參數(shù),括號內(nèi)的第一個參數(shù)為第二個,依次類推)

      {{ message | filterA("arg1", arg2) }}
      13.Vue-Router 安裝

      直接用

      閱讀需要支付1元查看
        <fieldset id="moq20"><input id="moq20"></input></fieldset>
        <ul id="moq20"></ul>
        <del id="moq20"></del>
        <