本文摘自PHP中文网,作者青灯夜游,侵删。
能够向组件添加动态类名是非常强大的功能。它使我们可以更轻松地编写自定义主题,根据组件的状态添加类,还可以编写依赖于样式的组件的不同变体。
添加动态类名与在组件中添加 prop :class="classname"
一样简单。无论classname
的计算结果是什么,都将是添加到组件中的类名。
当然,对于Vue中的动态类,我们可以做的还有很多。在本文中,我们将讨论很多内容:
- 在 Vue 中使用静态和动态类
- 如何使用常规的 JS 表达式来计算我们的类
- 动态类名的数组语法
- 对象语法
- 快速生成类名
- 如何在自定义组件上使用动态类名
静态和动态类
在Vue中,我们可以向组件添加静态类和动态类。
静态类是那些永远不会改变的乏味类,它们将始终出现在组件中。另一方面,我们可以在应用程序中添加和删除动态类。
添加静态类与在常规HTML中所做的是完全相同的
1 2 3 4 5 |
|
动态类非常类似,但是我们必须使用Vue的特殊属性语法v-bind
,以便将 JS 表达式绑定到我们的类:
1 2 3 4 5 |
|
这里你会注意到,我们必须在动态类名周围添加额外的引号。
这是因为v-bind
语法接受我们作为 JS 值传递的任何内容。添加引号可以确保Vue将其视为字符串。
Vue还有一个v-bind
的简写语法:
1 2 3 4 5 |
|
真正奇妙的是,您甚至可以在同一个组件上同时拥有静态类和动态类。静态类用于我们知道不会更改的内容,比如定位和布局,动态类用于主题之类的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
在本例中,theme
是包含我们将应用的类名的变量。
有条件的类名
由于v-bind
可以接受任何 JS 表达式,因此我们可以用它做一些非常酷的事情。我最喜欢的是在模板中使用三元表达式,它往往是非常干净和可读的。
1 2 3 4 5 6 7 |
|
如果darkMode
为true
,则将dark-theme
用作我们的类名。 否则,我们选择light-theme
。
使用数组语法
如果需要动态添加许多不同的类,可以使用数组或对象。这两种方法都很有用,我们先来看数组方式。
因为我们只是在计算一个 JS 表达式,所以可以将我们刚刚学到的表达式与数组语法结合起来
1 2 3 4 5 6 7 8 9 10 |
|
我们使用数组在这个元素上设置两个动态类名。fontTheme
的值是一个类名,它将改变字体的外观。在前面的例子中,我们仍然可以使用darkMode
变量在dark-theme
和light-theme
之间切换。
使用对象语法
我们甚至可以使用对象来定义动态类的列表,这给了我们更多的灵活性。
对于任何值为真的键/值对,它将把键用作类名。让我们看一个对象语法的例子:
1 2 3 4 5 6 7 8 9 10 |
|
我们的对象包含两个键:dark-theme
和light-theme
。与我们之前实现的逻辑类似,我们希望基于darkMode
的值在这些主题之间切换。
当darkMode
为 true
时,会把dark-theme
作为一个动态类名应用于我们的元素。但是light-them
不会被应用,因为!darkMode
值为false
。
相关阅读 >>
更多相关阅读请进入《vue》频道 >>
Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者