Contents

Vue 使用綁定 class 筆記

在使用 Bootstrap 會用到 Navbar 選單,做到動態選單時候會用到 isActive,要怎麼透過 Vue 綁定到 class 上面?照官方實作可以簡單完成。

需求解法

1
2
3
4
5
6
                <li class="nav-item">
                  <a class="nav-link" :class="{active: mode === 'edit'}" aria-current="page" href="javascript:;" @click="mode = 'edit'">編輯</a>
                </li>
                <li class="nav-item">
                  <a class="nav-link" :class="{active: mode === 'result'}" href="javascript:;" @click="mode = 'result'">結果</a>
                </li>
1
2
3
4
5
6
export default {
  data(){
    return {
      mode: 'edit',
    }
  },

綁定 HTML Class

物件語法

1
<div :class="{ active: isActive }"></div>

靜態與動態 Class 結合

1
2
3
4
<div
  class="static"
  :class="{ active: isActive, 'text-danger': hasError }"
></div>
1
2
3
4
5
6
data() {
  return {
    isActive: true,
    hasError: false
  }
}

結果

1
<div class="static active"></div>

搭配 computed

1
<div :class="classObject"></div>
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
data() {
  return {
    isActive: true,
    error: null
  }
},
computed: {
  classObject() {
    return {
      active: this.isActive && !this.error,
      'text-danger': this.error && this.error.type === 'fatal'
    }
  }
}

陣列語法

1
<div :class="[activeClass, errorClass]"></div>
1
2
3
4
5
6
data() {
  return {
    activeClass: 'active',
    errorClass: 'text-danger'
  }
}

result:

1
<div class="active text-danger"></div>

在組件上使用

https://i.imgur.com/3H4h4Pn.png

還滿特別的,建議去看官方文件範例:Class 与 Style 绑定 - 在組件上使用 | Vue.js