vue中class与style的绑定

数据绑定一个常见需求是操作元素的 class 列表和它的内联样式。因为它们都是属性 ,我们可以用v-bind 处理它们:只需要计算出表达式最终的字符串。不过,字符串拼接麻烦又易错。因此,在 v-bind 用于 class 和 style 时, Vue.js 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组

绑定 html class

对象语法

我们可以传给 v-bind:class 一个对象,以动态地切换 class

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

上面的语法表示 class的active 更新将取决于数据属性 isActive 是否为真值

我们也可以在对象中传入更多属性用来动态切换多个 class 。此外, v-bind:class 指令可以与普通的 class 属性共存:

<div class="static" v-bind:class="{ active: isActive, 'text-danger': hasError }">
</div>

如下 data:

data: {
    isActive: true,
    hasError: false
}

渲染为:

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

当 isActive 或者 hasError 变化时,class 列表将相应地更新

你也可以直接绑定数据里的一个对象:

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

渲染的结果和上面一样。我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式:

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

数组语法

我们可以把一个数组传给 v-bind:class ,以应用一个 class 列表:

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

渲染为:

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

如果你也想根据条件切换列表中的 class ,可以用三元表达式:

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

此例始终添加 errorClass ,但是只有在 isActive 是 true 时添加 activeClass

不过,当有多个条件 class 时这样写有些繁琐。可以在数组语法中使用对象语法:

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

用在组件上

当你在一个定制的组件上用到 class 属性的时候,这些类将被添加到根元素上,这个元素上已经存在的类不会被覆盖

例如,如果你声明了这个组件:

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

然后在使用它的时候添加一些 class:

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

HTML 最终将被渲染成为:

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

同样的适用于绑定 HTML class :

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

当 isActive 为 true 的时候,HTML 将被渲染成为:

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

绑定内联样式

语法对象

"v-bind:style" 的对象语法十分直观——看着非常像 CSS ,其实它是一个 JavaScript 对象。 CSS 属性名可以用驼峰式(camelCase)或短横分隔命名(kebab-case):

<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
<script>
data: {
    activeColor: 'red',
    fontSize: 30
}
</script>

直接绑定到一个样式对象通常更好,让模板更清晰:

<div v-bind:style="styleObject"></div>
<script>
data: {
    styleObject: {
        color: 'red',
        fontSize: '13px'
    }
}
</script>

同样的,对象语法常常结合返回对象的计算属性使用

数组语法

v-bind:style 的数组语法可以将多个样式对象应用到一个元素上:

<div v-bind:style="[baseStyles, overridingStyles]">

自动添加前缀

当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀

多重值

从 2.3 开始你可以为 style 绑定中的属性提供一个包含多个值的数组,常用于提供多个带前缀的值:

<div :style="{ display: ["-webkit-box", "-ms-flexbox", "flex"] }">
时间: 2024-11-01 09:22:16

vue中class与style的绑定的相关文章

学习vue.js中class与style绑定_javascript技巧

关于vue.js中class与style绑定的练习代码,分享给大家,供大家参考: html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Vuejs中Class与Style 绑定</title> <link rel="stylesheet" href="css/vu

重新想象 Windows 8 Store Apps (52) - 绑定: 与 Element Model Indexer Style RelativeSource 绑定, 以及绑定中的数据转换

原文:重新想象 Windows 8 Store Apps (52) - 绑定: 与 Element Model Indexer Style RelativeSource 绑定, 以及绑定中的数据转换 [源码下载] 重新想象 Windows 8 Store Apps (52) - 绑定: 与 Element Model Indexer Style RelativeSource 绑定, 以及绑定中的数据转换 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 绑定 与

vue中的组件

什么是组件 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js的编译器为它添加特殊功能.在有些情况下,组件也可以是原生HTML元素的形式,以is特性扩展 使用组件 注册 我们可以通过以下方式创建一个Vue实例: new Vue({ el: '#some-element', // 选项 }) 要注册一个全局组件,可以使用Vue.component(tagName, options).例如: Vue.co

vue中过渡和动画

进入/离开 & 列表过渡 概述 Vue在插入.更新或移除DOM时,提供多种不同方式的应用过渡效果.包括以下工具: 在CSS过渡和动画中自动应用class:配合使用第三方CSS动画库,如Animate.css:在过渡钩子函数中使用JavaScript直接操作DOM:配合使用第三方JavaScript动画库,如Velocity.js 在这里,我们只会讲到进入.离开和列表的过渡, 你也可以看下一节的管理过渡状态 单元素/组件的过渡 Vue提供了transition的封装组件,在下列情形中,可以给任何元

学习vue.js表单控件绑定操作_javascript技巧

本文实例为大家分享了vue.js表单控件绑定的具体代码,供大家参考,具体内容如下 html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表单控件绑定</title> </head> <body> <!-- v-model在表单控件元素上实现数据的双向绑定 -->

jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解_jquery

本文实例分析了jQuery中bind(),live(),delegate(),on()绑定事件方法.分享给大家供大家参考,具体如下: 前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅,也希望该文章日后能帮助到各位朋友,文中如有不当之处,还望各位指正,话不多说,直接进入正题. 一.bind() 简要描述 bind()向匹配元素添加一个或多个事件处理器. 使用方式 复制

JavaScript中this的四个绑定规则总结_javascript技巧

前言 如果要问javascript中哪两个知识点容易混淆,作用域查询和this机制绝对名列前茅.所以这篇文章开始将介绍javascript中this的四个绑定规则,下面来一起看看吧. 绑定规则 1. 默认绑定 独立函数调用时,this 指向全局对象,如果使用严格模式,那么全局对象无法使用默认绑定, this绑定至 undefined. function foo() { console.log(this.a); } var a = 2; foo(); // 2 严格模式时: function fo

textview-以程序的形式设置 Typeface,在 xml 中设置 text style

问题描述 以程序的形式设置 Typeface,在 xml 中设置 text style 我在 xml 中定义了一个 textview,现在以程序化的方式设置 Typeface: textView.setTypeface(APP_FONT_REGULAR); //在assests (.ttf file) 中自定义字体 现在我在 xml 中设置了android:textStyle=""bold""但是为什么没有应用粗体字?如何应用自定义的 Typface 并把它设置为粗

javascript-js如何判断多个div标签中的每个style属性是否等于“display:none”

问题描述 js如何判断多个div标签中的每个style属性是否等于"display:none" 如题,而且class的值是一样的,比如: 解决方案 <div> </div> 解决方案二: <div> <div id="1" class="upload_append_list" style="display:none">...</div> <div id=&quo