구성 요소에 동적 클래스 이름을 추가할 수 있다는 것은 매우 강력한 기능입니다. 이를 통해 사용자 정의 테마를 작성하고, 구성 요소의 상태에 따라 클래스를 추가하고, 스타일에 따라 구성 요소의 다양한 변형을 작성하는 것이 더 쉬워졌습니다.
동적 클래스 이름을 추가하는 것은 구성 요소에 prop :class="classname"
을 추가하는 것만큼 쉽습니다. classname
이 평가하는 것은 무엇이든 구성 요소에 추가된 클래스 이름이 됩니다. :class="classname"
一样简单。无论classname
的计算结果是什么,都将是添加到组件中的类名。
当然,对于Vue中的动态类,我们可以做的还有很多。在本文中,我们将讨论很多内容:
- 在 Vue 中使用静态和动态类
- 如何使用常规的 JS 表达式来计算我们的类
- 动态类名的数组语法
- 对象语法
- 快速生成类名
- 如何在自定义组件上使用动态类名
静态和动态类
在Vue中,我们可以向组件添加静态类和动态类。
静态类是那些永远不会改变的乏味类,它们将始终出现在组件中。另一方面,我们可以在应用程序中添加和删除动态类。
添加静态类与在常规HTML中所做的是完全相同的
<template> <span class="description"> This is how you add static classes in Vue. </span> </template>
动态类非常类似,但是我们必须使用Vue的特殊属性语法v-bind
,以便将 JS 表达式绑定到我们的类:
<template> <span v-bind:class="'description'"> This is how you add static classes in Vue. </span> </template>
这里你会注意到,我们必须在动态类名周围添加额外的引号。
这是因为v-bind
语法接受我们作为 JS 值传递的任何内容。添加引号可以确保Vue将其视为字符串。
Vue还有一个v-bind
的简写语法:
<template> <span :class="'description'"> This is how you add static classes in Vue. </span> </template>
真正奇妙的是,您甚至可以在同一个组件上同时拥有静态类和动态类。静态类用于我们知道不会更改的内容,比如定位和布局,动态类用于主题之类的:
<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
是包含我们将应用的类名的变量。
有条件的类名
由于v-bind
可以接受任何 JS 表达式,因此我们可以用它做一些非常酷的事情。我最喜欢的是在模板中使用三元表达式,它往往是非常干净和可读的。
<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
。
使用数组语法
如果需要动态添加许多不同的类,可以使用数组或对象。这两种方法都很有用,我们先来看数组方式。
因为我们只是在计算一个 JS 表达式,所以可以将我们刚刚学到的表达式与数组语法结合起来
<template> <span class="description" :class="[ fontTheme, darkMode ? 'dark-theme' : 'light-theme', ]" > This is how you add dynamic classes in Vue. </span> </template>
我们使用数组在这个元素上设置两个动态类名。fontTheme
的值是一个类名,它将改变字体的外观。在前面的例子中,我们仍然可以使用darkMode
变量在dark-theme
和light-theme
之间切换。
使用对象语法
我们甚至可以使用对象来定义动态类的列表,这给了我们更多的灵活性。
对于任何值为真的键/值对,它将把键用作类名。让我们看一个对象语法的例子:
<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
。与我们之前实现的逻辑类似,我们希望基于darkMode
的值在这些主题之间切换。
当darkMode
为 true
时,会把dark-theme
作为一个动态类名应用于我们的元素。但是light-them
不会被应用,因为!darkMode
值为false
。
现在我们已经介绍了向Vue组件动态添加类的基础知识。那么如何使用自己的自定义组件来做到这一点?
与自定义组件一起使用
假设我们在 app 中有一个自定义组件
<template> <MovieList :movies="movies" :genre="genre" /> </template>
如果我们要动态添加一个将更改主题的类,我们该怎么办?其实很简单。
我们只需要像以前那样添加:class
属性
<template> <MovieList :movies="movies" :genre="genre" :class="darkMode ? 'dark-theme' : 'light-theme'" /> </template>
之所以起作用,是因为Vue直接在MovieList
的根元素上设置类。
在组件上设置props
时,Vue会将这些props与组件在其props
部分中指定的props进行比较。 如果有匹配项,它将作为常规props传递。 否则,Vue会将其添加到根DOM元素中。
在这里,由于MovieList
没有指定class
属性,因此Vue知道应该在根元素上进行设置。
不过,我们可以用动态类名做一些更高级的事情。
快速生成类名
我们已经介绍了许多动态添加或删除类名的不同方法。但是动态生成类名本身又如何呢?
假设有一个Button
- Vue에서 정적 및 동적 클래스 사용
- 일반 JS 표현식을 사용하여 클래스를 평가하는 방법
- 배열 구문 동적 클래스 이름의 경우
- 객체 구문
- 빠른 클래스 이름 생성
- 사용자 정의 구성 요소에서 동적 클래스 이름을 사용하는 방법 ul>
정적 및 동적 클래스
🎜Vue에서는 정적 클래스와 동적 클래스를 구성 요소에 추가할 수 있습니다. 🎜🎜정적 클래스는 결코 변하지 않는 지루한 클래스이며 항상 구성 요소에 존재합니다. 반면에 애플리케이션에서 동적 클래스를 추가하고 제거할 수 있습니다. 🎜🎜정적 클래스를 추가하는 것은 일반 HTML에서 수행하는 것과 정확히 동일합니다. 🎜<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; }🎜동적 클래스는 매우 유사하지만 JS 표현식을 바인딩하려면 Vue의 특수 속성 구문
v-bind
를 사용해야 합니다. 우리 클래스: 🎜<template> <button @click="$emit('click')" class="button" :class="theme" > {{ text }} </button> </template> export default { props: { theme: { type: String, default: 'default', } } }; .default {} .primary {} .danger {}🎜여기서 동적 클래스 이름 주위에 추가 따옴표를 추가해야 한다는 것을 알 수 있습니다. 🎜🎜이는
v-bind
구문이 JS 값으로 전달하는 모든 것을 허용하기 때문입니다. 따옴표를 추가하면 Vue가 이를 문자열로 처리합니다. 🎜🎜Vue에는 v-bind
에 대한 단축 구문도 있습니다. 🎜<template> <MovieList :movies="movies" :genre="genre" :class="class" /> </template> export default { computed: { class() { return darkMode ? 'dark-theme' : 'light-theme'; } } };🎜정말 놀라운 점은 동일한 구성 요소에 정적 클래스와 동적 클래스를 모두 가질 수도 있다는 것입니다. 정적 클래스는 위치 지정 및 레이아웃과 같이 변경되지 않는 항목에 사용되며 동적 클래스는 테마와 같은 항목에 사용됩니다. 🎜rrreee🎜 이 경우
theme
는 다음을 포함하는 클래스 이름입니다. 이름에 변수를 적용하겠습니다. 🎜조건부 클래스 이름
🎜v-bind
는 모든 JS 표현식을 허용하므로 이를 사용하여 정말 멋진 작업을 수행할 수 있습니다. 제가 가장 좋아하는 것은 템플릿에서 삼항 표현식을 사용하는 것입니다. 이는 매우 깨끗하고 읽기 쉬운 경향이 있습니다. 🎜rrreee🎜darkMode
가 true
이면 dark-theme
가 클래스 이름으로 사용됩니다. 그렇지 않으면 light-theme
을 선택합니다. 🎜배열 구문 사용
🎜다양한 클래스를 동적으로 추가해야 하는 경우 배열이나 객체를 사용할 수 있습니다. 두 가지 방법 모두 유용합니다. 먼저 배열 방법을 살펴보겠습니다. 🎜🎜JS 표현식을 평가하는 것이므로 방금 배운 표현식을 배열 구문으로 결합할 수 있습니다🎜rrreee🎜배열을 사용하여 이 요소에 두 개의 동적 클래스 이름을 설정합니다.fontTheme
값은 글꼴 모양을 변경하는 클래스 이름입니다. 이전 예에서는 darkMode
변수를 사용하여 어두운 테마
와 밝은 테마
사이를 전환할 수 있습니다. 🎜객체 구문 사용
🎜객체를 사용하여 동적 클래스 목록을 정의할 수도 있으므로 더 많은 유연성이 제공됩니다. 🎜🎜값이 true인 키/값 쌍의 경우 키를 클래스 이름으로 사용합니다. 개체 구문의 예를 살펴보겠습니다. 🎜rrreee🎜 개체에는dark-theme
및 light-theme
라는 두 개의 키가 포함되어 있습니다. 이전에 구현한 논리와 유사하게 darkMode
값에 따라 이러한 테마 간에 전환하려고 합니다. 🎜🎜 darkMode
가 true
이면 dark-theme
가 요소에 동적 클래스 이름으로 적용됩니다. 하지만 !darkMode
값이 false
이므로 light-them
은 적용되지 않습니다. 🎜🎜이제 Vue 구성 요소에 클래스를 동적으로 추가하는 기본 사항을 다루었습니다. 그렇다면 내 사용자 정의 구성 요소를 사용하여 이 작업을 어떻게 수행할 수 있습니까? 🎜맞춤 구성요소와 작동
🎜앱에 맞춤 구성요소가 있다고 가정해 보세요🎜rrreee🎜테마 관리를 변경하는 클래스를 동적으로 추가하려면 어떻게 해야 하나요? 실제로는 매우 간단합니다. 🎜🎜전과 같이:class
속성만 추가하면 됩니다. 🎜rrreee🎜이것은 Vue가 MovieList
의 루트 요소에 직접 클래스를 설정하기 때문에 작동합니다. 🎜🎜구성 요소에 props
를 설정할 때 Vue는 이러한 props를 props
섹션의 구성 요소가 지정한 props와 비교합니다. 일치하는 항목이 있으면 일반 소품으로 전달됩니다. 그렇지 않으면 Vue는 이를 루트 DOM 요소에 추가합니다. 🎜🎜여기서 MovieList
는 class
속성을 지정하지 않기 때문에 Vue는 해당 속성이 루트 요소에 설정되어야 한다는 것을 알고 있습니다. 🎜🎜그러나 동적 클래스 이름을 사용하면 좀 더 고급 작업을 수행할 수 있습니다. 🎜빠른 클래스 이름 생성
🎜클래스 이름을 동적으로 추가하거나 제거하는 다양한 방법을 다루었습니다. 하지만 동적으로 생성된 클래스 이름 자체는 어떻습니까? 🎜🎜모든 다양한 유형의 버튼에 대해 20가지 CSS 스타일을 제공하는Button
구성 요소가 있다고 가정해 보겠습니다. 🎜你可能不想花一整天的时间把每一项都写出来,也不想把开关的逻辑都写出来。相反,我们将动态生成要应用的类的名称。
<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; }
我们可以设置一个变量来包含我们想要的任何类名的字符串。如果我们想对Button
组件执行此操作,则可以执行以下简单操作:
<template> <button @click="$emit('click')" class="button" :class="theme" > {{ text }} </button> </template> export default { props: { theme: { type: String, default: 'default', } } }; .default {} .primary {} .danger {}
现在,使用Button
组件的任何人都可以将theme
属性设置为他们想要使用的任何主题。
如果没有设置任何类,它将添加.default
类。如果将其设置为primary
,则会添加.primary
类。
使用计算属性来简化类
最终,模板中的表达式将变得过于复杂,并将开始变得非常混乱和难以理解。幸运的是,我们有一个简单的解决方案,就是使用计算民属性:
<template> <MovieList :movies="movies" :genre="genre" :class="class" /> </template> export default { computed: { class() { return darkMode ? 'dark-theme' : 'light-theme'; } } };
这不仅易于阅读,而且还可以轻松添加新功能并在将来进行重构。
英文原文地址:https://forum.vuejs.org/t/add-a-dynamically-generated-class-name-to-components-class-attribute-from-mixin/27626
为了保证的可读性,本文采用意译而非直译。
相关推荐:
更多编程相关知识,请访问:编程教学!!
위 내용은 Vue에서 클래스 이름을 동적으로 추가하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Netflix는 주로 VUE가 특정 기능을 위해 보충하는 프론트 엔드 프레임 워크로 React를 사용합니다. 1) React의 구성 요소화 및 가상 DOM은 Netflix 애플리케이션의 성능 및 개발 효율을 향상시킵니다. 2) VUE는 Netflix의 내부 도구 및 소규모 프로젝트에 사용되며 유연성과 사용 편의성이 핵심입니다.

vue.js는 복잡한 사용자 인터페이스를 구축하는 데 적합한 점진적인 JavaScript 프레임 워크입니다. 1) 핵심 개념에는 반응 형 데이터, 구성 요소화 및 가상 DOM이 포함됩니다. 2) 실제 응용 분야에서는 TODO 응용 프로그램을 구축하고 Vuerouter를 통합하여 시연 할 수 있습니다. 3) 디버깅 할 때 VuedeVtools 및 Console.log를 사용하는 것이 좋습니다. 4) 성능 최적화는 V-IF/V- 쇼, 목록 렌더링 최적화, 구성 요소의 비동기로드 등을 통해 달성 할 수 있습니다.

vue.js는 중소형 프로젝트에 적합하지만 REACT는 크고 복잡한 응용 프로그램에 더 적합합니다. 1. Vue.js의 응답 형 시스템은 종속성 추적을 통해 DOM을 자동으로 업데이트하여 데이터 변경을 쉽게 관리 할 수 있습니다. 2. 반응은 단방향 데이터 흐름을 채택하고 데이터 흐름에서 하위 구성 요소로 데이터가 흐르고 명확한 데이터 흐름과 곤란하기 쉬운 구조를 제공합니다.

vue.js는 중소형 프로젝트 및 빠른 반복에 적합한 반면 React는 크고 복잡한 응용 프로그램에 적합합니다. 1) vue.js는 사용하기 쉽고 팀이 불충분하거나 프로젝트 규모가 작는 상황에 적합합니다. 2) React는 더 풍부한 생태계를 가지고 있으며 고성능 및 복잡한 기능적 요구가있는 프로젝트에 적합합니다.

VUE에서 태그의 점프를 구현하는 방법에는 다음이 포함됩니다. HTML 템플릿의 A 태그를 사용하여 HREF 속성을 지정합니다. VUE 라우팅의 라우터 링크 구성 요소를 사용하십시오. javaScript 에서이. $ router.push () 메소드를 사용하십시오. 매개 변수는 쿼리 매개 변수를 통해 전달 될 수 있으며 동적 점프를 위해 라우터 옵션에서 경로가 구성됩니다.

VUE에서 구성 요소 점프를 구현하는 방법은 다음과 같습니다. 라우터 링크 및 & lt; router-view & gt; 하이퍼 링크 점프를 수행하고 대상 경로로 속성을 지정합니다. & lt; router-view & gt; 현재 라우팅 된 렌더링 된 구성 요소를 표시하는 구성 요소. 프로그래밍 방식 탐색을 위해 router.push () 및 router.replace () 메소드를 사용하십시오. 전자는 역사를 구하고 후자는 기록을 떠나지 않고 현재 경로를 대체합니다.

VUE에서 DIV 요소를 점프하는 두 가지 방법이 있습니다. VUE 라우터를 사용하고 라우터 링크 구성 요소를 추가하십시오. @Click 이벤트 리스너를 추가하고 이것을 호출하십시오. $ router.push () 메소드를 점프하십시오.

VUE에서 데이터를 전달하는 두 가지 주요 방법이 있습니다 : Props : 일원 데이터 바인딩, 부모 구성 요소에서 자식 구성 요소로 데이터를 전달합니다. 이벤트 : 이벤트와 사용자 정의 이벤트를 사용하여 구성 요소간에 데이터를 전달합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Dreamweaver Mac版
시각적 웹 개발 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구
