๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ปWEB FrontEnd/ํ”„๋ ˆ์ž„์›Œํฌ Vue

ํด๋ž˜์Šค ๋ฐ”์ธ๋”ฉ

 v-bind ๋””๋ ‰ํ‹ฐ๋ธŒ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ class์™€ style์„ ์‚ฌ์šฉํ•ด ์›ํ•˜๋Š” ์Šคํƒ€์ผ๋ง์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

v-bind:class="ํด๋ž˜์Šค๋ช…"
v-bind:class="{ ํด๋ž˜์Šค๋ช…: ์กฐ๊ฑด }"

์œ„์ฒ˜๋Ÿผ v-bind:class๋Š” ๋ฌธ์ž์—ด๊ณผ ๊ฐ์ฒด ๋˜๋Š” ๋ฐฐ์—ด์„ ๋‘˜ ๋‹ค ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

๊ฐ์ฒด๋ฅผ ๋ฐ›์€ ๊ฒฝ์šฐ์—๋Š” ํด๋ž˜์Šค๋ช…์€ ๊ฐ์ฒด์˜ ์†์„ฑ ํ‚ค์—ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์ ์šฉ๋˜์•ผ ํ•˜๋Š” ์กฐ๊ฑด์ด ์†์„ฑ ๊ฐ’์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

 


1. ๊ฐ์ฒด ๊ตฌ๋ฌธ

1) v-bind ํด๋ž˜์Šค ๋ฐ”์ธ๋”ฉ์„ ์ด์šฉํ•œ ํด๋ž˜์Šค ํ† ๊ธ€

  • ํด๋ž˜์Šค๋ฅผ ๋™์ ์œผ๋กœ ํ† ๊ธ€ํ•˜๊ธฐ ์œ„ํ•ด v-bind:class์— ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์•„๋ž˜ ๊ตฌ๋ฌธ์€ active ํด๋ž˜์Šค์˜ ์กด์žฌ ์—ฌ๋ถ€๊ฐ€ ๋ฐ์ดํ„ฐ ์†์„ฑ isActive์˜ ์ฐธ ์†์„ฑ์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค.
<div v-bind:class="{ active: isActive }"></div>

 

 

2) ์—ฌ๋Ÿฌ ํด๋ž˜์Šค ํ† ๊ธ€

  • ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋ฅผ ํ† ๊ธ€ํ•˜๋ ค๋ฉด ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ๊ฐ์ฒด์— ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.
  • v-bind:class ๋””๋ ‰ํ‹ฐ๋ธŒ๋Š” ์ผ๋ฐ˜ class์†์„ฑ๊ณผ ๊ณต์กดํ•  ์ˆ˜ ์žˆ๋‹ค.
<div
  class="static"
  v-bind:class="{ active: isActive, 'text-danger': hasError }"
></div>

 

data: {
  isActive: true,
  hasError: false
}

์œ„ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋ Œ๋”๋ง ๋œ๋‹ค.

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

 

 

3)

๋ฐ”์ธ๋”ฉ ๋œ ๊ฐ์ฒด๋Š” ์ธ๋ผ์ธ์ผ ํ•„์š”๋Š” ์—†๋‹ค.

<div v-bind:class="classObject"></div>โ€‹
data: {
  classObject: {
    active: true,
    'text-danger': false
  }
}

 

 

4) computed์†์„ฑ ๋ฐ”์ธ๋”ฉ

๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” computed ์†์„ฑ์—๋„ ๋ฐ”์ธ๋”ฉ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

<div v-bind:class="classObject"></div>โ€‹
data: {
  isActive: true,
  error: null
},
computed: {
  classObject: function () {
    return {
      active: this.isActive && !this.error,
      'text-danger': this.error && this.error.type === 'fatal'
    }
  }
}

 

 

2. ๋ฐฐ์—ด ๊ตฌ๋ฌธ

1) ํด๋ž˜์Šค ๋ชฉ๋ก์„ ๋ฐฐ์—ด๋กœ ์ง€์ •

๋ฐฐ์—ด์„ v-bind:class ์— ์ „๋‹ฌํ•˜์—ฌ ํด๋ž˜์Šค ๋ชฉ๋ก์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

<div v-bind:class="[activeClass, errorClass]"></div>
data: {
  activeClass: 'active',
  errorClass: 'text-danger'
}

์•„๋ž˜์™€ ๊ฐ™์ด ๋ Œ๋”๋ง ๋œ๋‹ค.

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

 

 

2) ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ ํด๋ž˜์Šค ํ† ๊ธ€

์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ชฉ๋ก์— ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ์กฐ๊ฑด๋ถ€ ํ† ๊ธ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>

์œ„์™€ ๊ฐ™์ด ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ํด๋ž˜์Šค๋ฅผ ํ† ๊ธ€ํ•˜๋ฉด ํ•ญ์ƒ errorClass๋ฅผ ์ ์šฉํ•˜๊ณ  isActive๊ฐ€ true์ผ ๋•Œ๋งŒ activeClass๋ฅผ ์ ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ ์กฐ๊ฑด๋ถ€ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์žฅํ™ฉํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐฐ์—ด ๊ตฌ๋ฌธ ๋‚ด์—์„œ ๊ฐ์ฒด ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

 

3) ๋ฐฐ์—ด ๊ตฌ๋ฌธ ๋‚ด ๊ฐ์ฒด ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ํ† ๊ธ€

<div v-bind:class="[{ active: isActive }, errorClass]"></div>

 

 

3. ์ปดํฌ๋„ŒํŠธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๋กœ class ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด, ํด๋ž˜์Šค๊ฐ€ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ์— ์ถ”๊ฐ€๋œ๋‹ค. ์ด ์—˜๋ฆฌ๋จผํŠธ๋Š” ๊ธฐ์กด ํด๋ž˜์Šค๋Š” ๋ฎ์–ด์“ฐ์ง€ ์•Š๋Š”๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒฝ์šฐ์—

Vue.component('my-component', {
  template: '<p class="foo bar">Hi</p>'
})

 

<my-component class="baz boo"></my-component>

์œ„ ์ฝ”๋“œ๊ฐ€ ๋ Œ๋”๋ง ๋œ HTML์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

<p class="foo bar baz boo">Hi</p>

 

ํด๋ž˜์Šค ๋ฐ”์ธ๋”ฉ๋„ ๋™์ผํ•˜๋‹ค.

<my-component v-bind:class="{ active: isActive }"></my-component>

isActive๊ฐ€ ์ฐธ์ผ ๋•Œ ๋ Œ๋”๋ง ๋œ HTML์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

<p class="foo bar active">Hi</p>