最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解如何在Vue中動態(tài)添加類名

 更新時間:2022年07月07日 11:19:32   作者:@大遷世界  
本文主要介紹了如何在Vue中動態(tài)添加類名,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

能夠向組件添加動態(tài)類名是非常強大的功能。它使我們可以更輕松地編寫自定義主題,根據(jù)組件的狀態(tài)添加類,還可以編寫依賴于樣式的組件的不同變體。

添加動態(tài)類名與在組件中添加 prop :class="classname"一樣簡單。無論classname的計算結(jié)果是什么,都將是添加到組件中的類名。

當(dāng)然,對于Vue中的動態(tài)類,我們可以做的還有很多。在本文中,我們將討論很多內(nèi)容:

  • 在 Vue 中使用靜態(tài)和動態(tài)類
  • 如何使用常規(guī)的 JS 表達(dá)式來計算我們的類
  • 動態(tài)類名的數(shù)組語法
  • 對象語法
  • 快速生成類名
  • 如何在自定義組件上使用動態(tài)類名

靜態(tài)和動態(tài)類

在Vue中,我們可以向組件添加靜態(tài)類和動態(tài)類。

靜態(tài)類是那些永遠(yuǎn)不會改變的乏味類,它們將始終出現(xiàn)在組件中。另一方面,我們可以在應(yīng)用程序中添加和刪除動態(tài)類。

添加靜態(tài)類與在常規(guī)HTML中所做的是完全相同的

<template>
  <span class="description">
    This is how you add static classes in Vue.
  </span>
</template>

動態(tài)類非常類似,但是我們必須使用Vue的特殊屬性語法v-bind,以便將 JS 表達(dá)式綁定到我們的類:

<template>
  <span v-bind:class="'description'">
    This is how you add static classes in Vue.
  </span>
</template>

這里你會注意到,我們必須在動態(tài)類名周圍添加額外的引號。

這是因為v-bind語法接受我們作為 JS 值傳遞的任何內(nèi)容。添加引號可以確保Vue將其視為字符串。

Vue還有一個v-bind的簡寫語法:

<template>
  <span :class="'description'">
    This is how you add static classes in Vue.
  </span>
</template>

真正奇妙的是,您甚至可以在同一個組件上同時擁有靜態(tài)類和動態(tài)類。靜態(tài)類用于我們知道不會更改的內(nèi)容,比如定位和布局,動態(tài)類用于主題之類的:

<template>
  <span
    class="description"
    :class="theme"
  >
    This is how you add static classes in Vue.
  </span>
</template>
 
export default {
  data() {
    return {
      theme: 'blue-theme',
    };
  }
};
----------------------------------------
.blue-theme {
  color: navy;
  background: white;
}

在本例中,theme是包含我們將應(yīng)用的類名的變量。

有條件的類名

由于v-bind可以接受任何 JS 表達(dá)式,因此我們可以用它做一些非??岬氖虑?。我最喜歡的是在模板中使用三元表達(dá)式,它往往是非常干凈和可讀的。

<template>
  <span
    class="description"
    :class="darkMode ? 'dark-theme' : 'light-theme'"
  >
    This is how you add dynamic classes in Vue.
  </span>
</template>

如果darkMode為true,則將dark-theme用作我們的類名。否則,我們選擇light-theme。

使用數(shù)組語法

如果需要動態(tài)添加許多不同的類,可以使用數(shù)組或?qū)ο?。這兩種方法都很有用,我們先來看數(shù)組方式。

因為我們只是在計算一個 JS 表達(dá)式,所以可以將我們剛剛學(xué)到的表達(dá)式與數(shù)組語法結(jié)合起來

<template>
  <span
    class="description"
    :class="[
      fontTheme,
      darkMode ? 'dark-theme' : 'light-theme',
    ]"
  >
    This is how you add dynamic classes in Vue.
  </span>
</template>

我們使用數(shù)組在這個元素上設(shè)置兩個動態(tài)類名。fontTheme的值是一個類名,它將改變字體的外觀。在前面的例子中,我們?nèi)匀豢梢允褂胐arkMode變量在dark-theme和light-theme之間切換。

使用對象語法

我們甚至可以使用對象來定義動態(tài)類的列表,這給了我們更多的靈活性。

對于任何值為真的鍵/值對,它將把鍵用作類名。讓我們看一個對象語法的例子:

<template>
  <span
    class="description"
    :class="{
      'dark-theme': darkMode,
      'light-theme': !darkMode,
    ]"
  >
    This is how you add dynamic classes in Vue.
  </span>
</template>

我們的對象包含兩個鍵:dark-theme和light-theme。與我們之前實現(xiàn)的邏輯類似,我們希望基于darkMode的值在這些主題之間切換。

當(dāng)darkMode為 true 時,會把dark-theme作為一個動態(tài)類名應(yīng)用于我們的元素。但是light-them不會被應(yīng)用,因為!darkMode 值為false。

現(xiàn)在我們已經(jīng)介紹了向Vue組件動態(tài)添加類的基礎(chǔ)知識。那么如何使用自己的自定義組件來做到這一點?

與自定義組件一起使用

假設(shè)我們在 app 中有一個自定義組件

<template>
  <MovieList
    :movies="movies"
    :genre="genre"
  />
</template>

如果我們要動態(tài)添加一個將更改主題的類,我們該怎么辦?其實很簡單。

我們只需要像以前那樣添加:class屬性

<template>
  <MovieList
    :movies="movies"
    :genre="genre"
    :class="darkMode ? 'dark-theme' : 'light-theme'"
  />
</template>

之所以起作用,是因為Vue直接在MovieList的根元素上設(shè)置類。

在組件上設(shè)置props時,Vue會將這些props與組件在其props部分中指定的props進(jìn)行比較。如果有匹配項,它將作為常規(guī)props傳遞。否則,Vue會將其添加到根DOM元素中。

在這里,由于MovieList沒有指定class屬性,因此Vue知道應(yīng)該在根元素上進(jìn)行設(shè)置。

不過,我們可以用動態(tài)類名做一些更高級的事情。

快速生成類名

我們已經(jīng)介紹了許多動態(tài)添加或刪除類名的不同方法。但是動態(tài)生成類名本身又如何呢?

假設(shè)有一個Button組件,它為所有不同類型的按鈕提供20種不同的CSS樣式。

你可能不想花一整天的時間把每一項都寫出來,也不想把開關(guān)的邏輯都寫出來。相反,我們將動態(tài)生成要應(yīng)用的類的名稱。

<template>
  <span
    class="description"
    :class="theme"
  >
    This is how you add static classes in Vue.
  </span>
</template>
 
 
export default {
  data() {
    return {
      theme: 'blue-theme',
    };
  }
};
 
.blue-theme {
  color: navy;
  background: white;
}

我們可以設(shè)置一個變量來包含我們想要的任何類名的字符串。如果我們想對Button組件執(zhí)行此操作,則可以執(zhí)行以下簡單操作:

<template>
  <button
    @click="$emit('click')"
    class="button"
    :class="theme"
  >
    {{ text }}
  </button>
</template>
 
export default {
  props: {
    theme: {
      type: String,
      default: 'default',
    }
  }
};
 
.default {}
 
.primary {}
 
.danger {}

現(xiàn)在,使用Button組件的任何人都可以將theme屬性設(shè)置為他們想要使用的任何主題。

如果沒有設(shè)置任何類,它將添加.default類。如果將其設(shè)置為primary,則會添加.primary類。

使用計算屬性來簡化類

最終,模板中的表達(dá)式將變得過于復(fù)雜,并將開始變得非常混亂和難以理解。幸運的是,我們有一個簡單的解決方案,就是使用計算民屬性:

<template>
  <MovieList
    :movies="movies"
    :genre="genre"
    :class="class"
  />
</template>
 
export default {
  computed: {
    class() {
      return darkMode ? 'dark-theme' : 'light-theme';
    }
  }
};

這不僅易于閱讀,而且還可以輕松添加新功能并在將來進(jìn)行重構(gòu)。

到此這篇關(guān)于詳解如何在Vue中動態(tài)添加類名的文章就介紹到這了,更多相關(guān)Vue 動態(tài)添加類名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue如何根據(jù)數(shù)值判斷顏色

    vue如何根據(jù)數(shù)值判斷顏色

    這篇文章主要介紹了vue如何根據(jù)數(shù)值判斷顏色問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue2.X和Vue3.0數(shù)據(jù)響應(yīng)原理變化的區(qū)別

    Vue2.X和Vue3.0數(shù)據(jù)響應(yīng)原理變化的區(qū)別

    這篇文章主要介紹了Vue2.X和Vue3.0數(shù)據(jù)響應(yīng)原理變化的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 使用@tap.stop阻止事件繼續(xù)傳播

    使用@tap.stop阻止事件繼續(xù)傳播

    這篇文章主要介紹了使用@tap.stop阻止事件繼續(xù)傳播,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • vue修改滾動條樣式的方法

    vue修改滾動條樣式的方法

    這篇文章主要介紹了vue修改滾動條樣式,首先要知道,修改滾動條樣式,利用偽元素-webkit-scrollbar。下面來看看文章內(nèi)容的具體實現(xiàn)吧
    2021-11-11
  • Vue中bus的使用詳解

    Vue中bus的使用詳解

    這篇文章主要介紹了Vue中bus的使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • vue使用ECharts實現(xiàn)折線圖和餅圖

    vue使用ECharts實現(xiàn)折線圖和餅圖

    這篇文章主要為大家詳細(xì)介紹了vue使用ECharts實現(xiàn)折線圖和餅圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue?頁面刷新、重置、更新頁面所有數(shù)據(jù)的示例代碼

    vue?頁面刷新、重置、更新頁面所有數(shù)據(jù)的示例代碼

    Vue.js提供了多種方式來實現(xiàn)頁面刷新、重置和更新頁面所有數(shù)據(jù)的功能,下面通過示例代碼演示vue?頁面刷新、重置、更新頁面所有數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • vue組件jsx語法的具體使用

    vue組件jsx語法的具體使用

    本篇文章主要介紹了vue組件jsx語法的具體使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • vue $router和$route的區(qū)別詳解

    vue $router和$route的區(qū)別詳解

    這篇文章主要介紹了vue $router和$route的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • vue3中require報錯require is not defined問題及解決

    vue3中require報錯require is not defined問題及解決

    這篇文章主要介紹了vue3中require報錯require is not defined問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評論

罗山县| 五华县| 同仁县| 葵青区| 孟州市| 郴州市| 安顺市| 平罗县| 庄浪县| 天镇县| 临猗县| 古交市| 进贤县| 万载县| 青铜峡市| 贞丰县| 万荣县| 久治县| 永清县| 唐山市| 安远县| 大同市| 丁青县| 鄯善县| 上犹县| 清涧县| 连山| 嘉义市| 贵港市| 汾西县| 宕昌县| 闻喜县| 乡宁县| 兴安县| 阿拉善左旗| 杭锦旗| 涟源市| 剑阁县| 贵德县| 宜宾县| 从江县|