1. 程式人生 > >筆記(一),VUE指令

筆記(一),VUE指令

指令(directive)

指令: 增強HTML功能的特殊屬性

為什麼: HTML本身是靜態的,沒有程式必須的元素: 變數、分支、迴圈

何時: 只要需要加強HTML的功能時

如何: <ANY 指令名=”值”>

指令有
v-bind: 繫結屬性:
  如何:<ANY v-bind:屬性名=”模型變數/表示式”
  可簡寫為: <ANY :屬性名=”模型變數/表示式”
v-on: 繫結事件處理函式
  如何: <ANY v-on:事件名=”處理函式(引數值,…,$event)”>
  可簡寫為:
  <ANY @事件名=” 處理函式(引數值,…,$event)”
  處理函式定義在:
  new Vue({
  el:”#app”,
  data:{ … },
  methods:{
    處理函式(形參,…){
      … …
      }
    }
  })
  獲得事件物件e: 2步:
  <ANY @事件名=”處理函式($event)”
  methods:{
    處理函式(e){
      e就是DOM的事件物件
    }
  }
  事件修飾符: 代替事件物件的API
  阻止預設行為: e.preventDefault()
  <ANY @click.prevent=”處理函式()”
  取消冒泡: e.stopPropagation()
  <ANY @click.stop=”處理函式()”
v-if: 根據條件控制元素的可見不可見
  單獨使用: 控制一個元素的可見不可見
  如何: <ANY v-if=”條件表示式”>
  聯合使用: v-if v-else-if v-else控制多個元素選其一顯示
v-show: 根據條件控制元素的可見不可見
  v-show是通過display:none隱藏——效率高
  vs v-if 是通過修改DOM樹(是否載入DOM節點)實現隱藏——效率低
  但是,如果控制多個元素選其一顯示時,首選v-if v-else-if v-else。。。
v-for: 反覆生成多個相同結構的HTML片段
  如何: <parent>
  <child v-for=”(value,i) in/of 陣列”>
  <sub>value和i可用於更子級元素的繫結
v-text 和 v-html:
  代替{{}}繫結元素的內容:
  如果繫結的是HTML片段: 用v-html
  如果繫結的是純文字內容: 用v-text
v-cloak: 在Vue物件載入完之前,臨時隱藏受監視的元素
  如何: 2步:
  自定義選擇器屬性[v-cloak]{ display:none }
  在要隱藏的元素上,新增v-cloak屬性:
  <ANY v-cloak >
  原理: 當Vue物件載入完,自動查詢v-cloak屬性移出
v-once: 僅在首次載入時,繫結一次,之後模型變數即使再變化,也不自動更新
  原理: 一旦首次繫結結束,就從虛擬DOM中移除該元素
  如何: <ANY v-once>繫結語法
v-pre: 保護元素內容中的{{}}不被vue編譯//用的不多~

v-model:雙向繫結

  問題: :value的方式只能將記憶體中模型變數的值繫結到頁面,不能將頁面的修改自動同步到記憶體中的模型變數上——單向繫結
  解決: 雙向繫結: 既能將記憶體中模型變數的值繫結到頁面,又能將頁面的修改自動同步到記憶體中的模型變數上。
  何時: 只要繫結可修改的表單元素,都用v-model
  如何: v-model:value=”模型變數”
  簡寫: v-model=”模型變數”
  原理: 所有帶v-model繫結的元素,都被加入一個監視佇列(watch),由一個死迴圈不斷監視佇列中元素的內容變化。只要發生變化,就直接修改繫結的模型變數
  監視函式: 只要頁面變化,就自動執行的函式

  繫結class和style
  可將class和style作為字串繫結
  問題: 拼接字串很麻煩!
  用物件繫結class和style
  <ANY :style=”模型變數” 模型變數是一個物件
  new Vue({
  el:
  data:{
    模型變數:{
    Css屬性:值, //不能省略單位
    … : …
    }
  })
  <ANY class=”寫死的class” :class=”模型變數” 也是物件
  結果: class和:class最終會合併為一個class=””
  new Vue({
  el:
  data:{
  模型變數:{
    “class名”:true, 表示啟用的class
    “class名”:false, 表示不啟用的class
      }  
    }
  })