1. 程式人生 > 其它 >vue學習02

vue學習02

Vue屬性繫結

Vue中不能直接使用{{ expression }} 語法進行繫結html的標籤,而是用它特有的v-bind指令(就是一種寫法,先按照格式走,具體指令是什麼可以後續再瞭解)。

繫結的語法結構:

<標籤 v-bind:屬性名="要繫結的Vue物件的data裡的屬性名"></標籤>
例如:
<span v-bind:id="menuId">{{ menuName }}</span>

參考如下程式碼案例:

<!DOCTYPE html> 
<html lang="en">
<head>
  <
meta charset="UTF-8"> <title>Vue入門之資料繫結--屬性繫結</title> <script src="https://unpkg.com/vue/dist/vue.js"></script> </head> <body> <div id="app"> <div v-bind:id="MenuContaineId"> <a href="#" v-bind:class="MenuClass">首頁</a> <a
href="#" v-bind:class="MenuClass">產品</a> <a href="#" v-bind:class="MenuClass">服務</a> <a href="#" v-bind:class="MenuClass">關於</a> </div> </div> <script> var app = new Vue({ el: '#app', data: {
// data: 是Vue物件中繫結的資料 MenuClass: 'top-menu', MenuContaineId: 'sitemenu' } }); </script> </body> </html>

屬性繫結簡寫

由於v-bind 使用非常頻繁,所以Vue提供了簡單的寫法,可以去掉v-bind直接使用:即可。

例如:
<div :id="MenuContaineId">
等價於
<div v-bind:id="MenuContaineId">

輸出純HTML

由於Vue對於輸出繫結的內容做了提前encode,保障在繫結到頁面上顯示的時候不至於被xss攻擊。但某些場景下,我們確保後臺資料是安全的,那麼我們就要在網頁中顯示原生的HTML標籤。Vue提供了v-html指令。

<div id="app">
  <div v-bind:id="MenuContaineId" v-html="MenuBody">
  </div>
</div>
<script>
  var app = new Vue({         
    el: '#app',               
    data: {                   // data: 是Vue物件中繫結的資料
      MenuContaineId: 'menu',
      MenuBody: '<p>這裡是選單的內容</p>'
    }
  });
</script>

結果:

<div id="app">
  <div id="menu">
    <p>這裡是選單的內容</p>
  </div>
</div>

樣式繫結

對於普通的屬性的繫結,只能用上面的講的繫結屬性的方式。而Vue專門加強了class和style的屬性的繫結。可以有複雜的物件繫結、陣列繫結樣式和類。

繫結樣式物件

經常我們需要對樣式進行切換,比如:div的顯示和隱藏,某些標籤active等。Vue提供的物件繫結樣式的方式就很容做這些事情。

程式碼:
<div v-bind:class="{ active: isActive }"></div>
解釋:
當 isActive為 true時, div就會具有了active樣式類,如果 isActive為false,那麼div就去掉active樣式類。
<!DOCTYPE html> 
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Vue入門之繫結樣式類</title>
  <script src="https://unpkg.com/vue/dist/vue.js"></script>
  <style>
  .active {
    background-color: #ccc;
  }
  </style>
</head>
<body>
  <div id="app">
    <div v-bind:id="MenuContaineId" v-bind:class="{ active: isActive }">
      繫結顏色類
    </div>
  </div>
  <script>
    var app = new Vue({         
      el: '#app',               
      data: {                   // data: 是Vue物件中繫結的資料
        MenuContaineId: 'menu',
        isActive: true
      }
    });
  </script>
</body>
</html>

混合普通的HTML標籤樣式類及繫結樣式物件

v-bind:class 指令可以與普通的 class 屬性共存。

<div id="app">
  <div class="static"
     v-bind:class="{ active: isActive, 'text-danger': hasError }">
  </div>
</div>
<script>
  var app = new Vue({         
    el: '#app',               
    data: {                   // data: 是Vue物件中繫結的資料
      isActive: true,
      hasError: false
    }
  });
</script>

結果:

<div id="app">
  <div class="static active">
  </div>  
</div>

繫結data中的樣式物件

直接在html屬性中的雙引號內寫物件,還是很不爽,也沒有智慧提示,很容易寫錯。 Vue可以讓我們直接把繫結的class字串指向data的一個物件,這樣就非常方便了,既可以有智慧提示,又可以很複雜進行編輯,不用擔心煩人的""了。

<div id="app">
  <div class="static"
     v-bind:class="classObject">
  </div>
</div>
<script>
  var app = new Vue({         
    el: '#app',               
    data: {
      classObject: {
        active: true,
        'text-danger': false
      }
    }
  });
</script>

結果:

<div id="app">
  <div class="static active">
  </div>
</div>

繫結樣式陣列

其實繫結陣列,就是繫結樣式物件的延續,看官網的例子程式碼吧。

<div v-bind:class="[activeClass, errorClass]">

data: {
  activeClass: 'active',
  errorClass: 'text-danger'
}

當然還有很多其他很有趣的支援,就不贅述了。

例如:
<div v-bind:class="[isActive ? activeClass : '', errorClass]">
<div v-bind:class="[{ active: isActive }, errorClass]">

搜尋

複製