私の外部記憶装置

ただの覚え書きです。ちょこちょこ見直して加筆・修正していますが、間違ってるかも😅

【Vue】v-bind(:class, :style)🚧作成中

v-bindの概要

:class拡張機能

:classv-bind:class の省略記法)では、オブジェクトを渡して CSS クラスを動的に切り替えることができる

classの書き方例①

  • template
<div
class="static"
v-bind:class="{ active: isActive, 'text-danger': hasError }"
></div>
  • script
// ver.2の場合
data: {
  isActive: true,
  hasError: false
}

// ver.3の場合。refはVueのAPI(参考サイト参照)
const isActive = ref(true)
const hasError = ref(false)
<div class="static active"></div>

classの書き方例②:オブジェクトを渡す書き方

レンダリング結果は、書き方①と同じになる

  • template(slim形式での例。( )は視認性UP目的で、無くても良い*1
.static(:class="classObject")
  • script
// ver.2の場合
data: {
  classObject: {
    active: true,
    'text-danger': false
  }
}

// ver.3の場合。reactiveはVueのAPI(参考サイト参照)
const classObject = reactive({
  active: true,
  'text-danger': false
})
  • scriptを以下のように書く事もできる
// ver.2の場合
data: {
  isActive: true,
  error: null
},
computed: {
  classObject: function () {
    return {
      active: this.isActive && !this.error,
      'text-danger': this.error && this.error.type === 'fatal'
    }
  }
}

// ver.3の場合。refはVueのAPI(参考サイト参照)
const isActive = ref(true)
const error = ref(null)

// computedはVueのAPI(参考サイト参照)
const classObject = computed(() => ({
  active: isActive.value && !error.value,
  'text-danger': error.value && error.value.type === 'fatal'
}))

:style拡張機能 🚧作成中

🚧作成中

参考

ver.2 API — Vue.js
ver.3 ビルトインのディレクティブ | Vue.js
ver.3 ref() < Reactivity API: Core | Vue.js
ver.3 reactive() < Reactivity API: Core | Vue.js
ver.3 computed() < Reactivity API: Core | Vue.js