【vue】指令

簡介

指令 (Directives) 是帶有 v- 前綴的特殊 attribute。指令 attribute 的值預期是單個 JavaScript 表達式 (v-for 是例外情況,稍後我們再討論)。指令的職責是,當表達式的值改變時,將其產生的連帶影響,響應式地作用於 DOM。

內容

官方API文檔給出的指令有14個,包括了我們之前學習過的v-once,v-html,以及v-text,v-show,v-if,v-else,v-else-if,v-for,v-on,v-bind,v-model,v-slot,v-pre,v-cloak。我們簡單的學習幾個,其他的後面會陸續學習到。
  • v-text

    更新元素的textcontent,和雙大括號的文本插值是一樣的效果。但是v-text沒有{{value}}插值靈活,因爲他是作用於元素之上,如果只是更新部分文本的話,雙大括號會更加方便。

    example:

     <div id="app">
     <!-- 這是一組相同結果的 -->
     <p v-text="message"></p>
     <p>{{message}}</p>
     <hr/>
     <!-- 這是一組部分元素更新的 -->
     <p v-text="message1"></p>
     <p>this is {{message}}</p>
    </div>
    <script type="text/javascript">
     var data = {
     	message:'maybe',
     	message1:'this is maybe'
     };
     var vm = new Vue({
     	el : '#app',
     	data : data
     })
    </script>
    

    result:

  • v-show和v-if

    v-show和v-if是一組功能比較相近的指令,他們之間的差別就是v-show指令只是讓元素顯示和隱藏,相當於操作的是元素的display屬性;而v-if指令是決定要不要渲染這個元素。簡單的來說就是如果某個變量爲false,如果在v-show指令中,則這個元素存在,但是屬於隱藏不可見,相當於display:none;,在v-if指定中則這個元素根本就不存在,不會渲染這個元素。

    example:

    <div id="app">
      <p v-if="show">123</p>
      <p v-show="show">123</p>
    </div>
    <script type="text/javascript">
      var data = {
      	show:false
      };
      var vm = new Vue({
      	el : '#app',
      	data : data
      })
    </script>
    

    result:

參數指令

一些指令能夠接收一個“參數”,在指令名稱之後以冒號表示,我們簡單的稱爲普通參數指令。從 2.6.0 開始,可以用方括號括起來的 JavaScript 表達式作爲一個指令的參數,我們稱爲動態參數指令。但是這個是有約束的,動態參數預期會求出一個字符串,異常情況下值爲 null。這個特殊的 null 值可以被顯性地用於移除綁定。任何其它非字符串類型的值都將會觸發一個警告。下面以v-bind,v-on兩個指令來做演示。
  • 普通參數指令

    example:

    <div id="app">
      <a v-bind:href="url">百度</a>
      <p v-on:click="click">點我</p>
    </div>
    <script type="text/javascript">
      var data = {
      	url:'https://www.baidu.com'
      };
      var vm = new Vue({
      	el : '#app',
      	data : data,
      	methods:{
      		click : function(){
      			alert('click');
      		}
      	}
      })
    </script>
    

    result:

  • 動態參數指令

    example:

    <div id="app">
      <a v-bind:[attr]="url">百度</a>
      <p v-on:[event]="click">點我</p>
    </div>
    <script type="text/javascript">
      var data = {
      	url:'https://www.baidu.com',
      	attr:'href',
      	event:'click'
      };
      var vm = new Vue({
      	el : '#app',
      	data : data,
      	methods:{
      		click : function(){
      			alert('click');
      		}
      	}
      })
    </script>
    

    result:

  • 動態參數及動態表達式的約束

    1. 語法約束,因爲某些字符,如空格和引號,放在 HTML attribute 名裏是無效的。

      example:

      <div id="app">
      <!-- 這會觸發一個編譯警告 -->
      <a v-bind:['at'+tr]="url">百度</a>
      <a v-bind:[at+tr]="url">百度</a>
      </div>
      <script type="text/javascript">
      var data = {
      url:'https://www.baidu.com',
      attr:'href',
      event:'click',
      at:'hr',
      tr:'ef'
      };
      var vm = new Vue({
      el : '#app',
      data : data,
      methods:{
      	click : function(){
      		alert('click');
      	}
      }
      })
      </script>
      

      result:

    2. 大小寫轉換,需要避免使用大寫字符來命名鍵名,因爲瀏覽器會把 attribute 名全部強制轉爲小寫

      example:

      <div id="app">
      <!-- 這會觸發一個編譯警告,必須有個小寫的href屬性才能運行 -->
      <a v-bind:[Href]="url">百度</a>
      </div>
      <script type="text/javascript">
      var data = {
      url:'https://www.baidu.com',
      Href:'href'
      };
      var vm = new Vue({
      el : '#app',
      data : data,
      methods:{
      	click : function(){
      		alert('click');
      	}
      }
      })
      </script>
      

      result:

  • 修飾符

    修飾符 (modifier) 是以半角句號 . 指明的特殊後綴,用於指出一個指令應該以特殊方式綁定。例如,.prevent 修飾符告訴 v-on 指令對於觸發的事件調用 event.preventDefault():

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

    v- 前綴作爲一種視覺提示,用來識別模板中 Vue 特定的 attribute。當你在使用 Vue.js 爲現有標籤添加動態行爲 (dynamic behavior) 時,v- 前綴很有幫助,然而,對於一些頻繁用到的指令來說,就會感到使用繁瑣。同時,在構建由 Vue 管理所有模板的單頁面應用程序 (SPA - single page application) 時,v- 前綴也變得沒那麼重要了。因此,Vue 爲 v-bindv-on 這兩個最常用的指令,提供了特定簡寫。

    1. v-bind縮寫

      <!-- 完整語法 -->
      <a v-bind:href="url">...</a>
      
      <!-- 縮寫 -->
      <a :href="url">...</a>
      
      <!-- 動態參數的縮寫 (2.6.0+) -->
      <a :[key]="url"> ... </a>
      
    2. v-on縮寫

      <!-- 完整語法 -->
      <a v-on:click="doSomething">...</a>
      
      <!-- 縮寫 -->
      <a @click="doSomething">...</a>
      
      <!-- 動態參數的縮寫 (2.6.0+) -->
      <a @[event]="doSomething"> ... </a>
      
    3. example

      <div id="app">
      <!-- v-bind -->
      <a v-bind:href="url">百度</a><br/>
      <a :href="url">百度</a><br/>
      <a :[href]="url">百度</a>
      <hr/>
      
      <!-- v-on -->
          <a v-on:click="click">點我</a><br/>
          <a @click="click">點我</a><br/>
          <a @[event]="click">點我</a>
      </div>
      <script type="text/javascript">
      var data = {
        url:'https://www.baidu.com',
            href:'href',
            event:'click'
      };
      var vm = new Vue({
      el : '#app',
      data : data,
      methods:{
      	click : function(){
      		alert('click');
      	}
      }
      })
      </script>
      
    4. result





參考資料:

Vue官網-模板語法
Vue視頻-模板語法-插值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章