科百科
当前位置: 首页 范文大全

v-if和v-show不能同时使用(v-bind及class)

时间:2023-06-08 作者: 小编 阅读量: 1 栏目名: 范文大全

在数据绑定中,最常见的两个需求就是元素的样式名称class和内联样式style的动态绑定,它们也是HTML属性,因此可以使用v-bind指令。只需要用v-bind计算出表达式最终的字符串也可以,不过有时候表达式的逻辑较为复杂,使用字符串拼接方法较难阅读和维护,所以Vue.js增强了对class和sytle的绑定。

DOM 元素经常会动态地绑定一些 class 类名或 style 样式。

一、了解 v-bind 指令

v-bind 指令的主要用法是动态更新 HTML 元素上的属性,可使用 v-bind 指令绑定 class 和 style 。如下,示例:

<div > <a v-bind:href="url">我是一个链接</a> <img v-bind:src="http://img.studyofnet.comimgUrl"> <!-- 缩写为 --> <a :href="url">我是一个链接</a> <img :src="http://img.studyofnet.comimgUrl"> </div> <script> var app = new Vue({ el: "#app", data: { url: 'https://www.github.com', imgUrl: 'http://bingbinlee.com/img.pang' } }) </script>

链接的 href 属性和图片的 src 属性都被动态设置了,当数据变化时,就会重新渲染。

在数据绑定中,最常见的两个需求就是元素的样式名称 class 和内联样式 style 的动态绑定,它们也是 HTML 属性,因此可以使用 v-bind 指令。只需要用 v-bind 计算出表达式最终的字符串也可以,不过有时候表达式的逻辑较为复杂,使用字符串拼接方法较难阅读和维护,所以 Vue.js 增强了对 class 和 sytle 的绑定。

二、绑定 class 的几种方式

2.1 对象语法

给 v-bind:class 设置一个对象,可以动态地切换 class ,例如:

<div > <div :></div> </div> <script> var app = new Vue({ el: "#app", data: { isActive: true } }) </script>

上面示例中,类名 active 依赖于数据 isActive, 当其为 true 时,div 会拥有类名 Active,为 false 时则没有,所以上例最终渲染完的结果是:

<div ></div>

对象中也可以传入多个属性,来动态切换 class 。另外,:class 可以与普通 class 共存,例如:

<div > <div:></div> </div> <script> var app = new Vue({ el: '#app', data: { isActive: true, isError: false } }) </script>

:class 内的表达式每项为真时,对应的类名就会加载,上面渲染后的结果为:

<div ></div>

当数据 isActive 或 isError 变化时,对应的 class 类名也会更新。比如当 isError 为 ture 时,渲染后的结果为:

<div ></div>

当 :class 的表达式过长或逻辑复杂时,还可以绑定一个计算属性,这是一种很友好和常见的用法,一般当条件多于两个时,都可以使用 data 或 computed ,例如使用计算属性:

<div > <div :></div> </div> <script> var app = new Vue({ el: "#app", data: { isActive: true, error: null }, computed: { classes: function () { return { active: this.isActive && !this.error, 'text-fail': this.error && this.error.type === 'fail' } } } }) </script>

除了计算属性,也可以直接绑定一个 Object 类型得数据,或者使用类似计算属性的 methods 。

2.2 数组语法

当需要应用多个 class 时,可以使用数组语法,给 :class 绑定一个数组,应用一个 class 列表:

<div > <div :></div> </div> <script> var app = new Vue ({ el: "#app", data: { activeCls: 'active', errorCls: 'error' } }) </script>

渲染后的结果为:

<div ></div>

也可以使用三元表达式来根据条件切换 class ,例如下面的示例:

<div > <div :></div> </div> <script> var app = new Vue ({ el: '#app', data: { isActive: true, activeCls: 'active', errorCls: 'error' } }) </script>

样式 error 会始终应用,当数据 isActive 为真时,样式 active 才会被应用。class 有多个条件时,这样写较为烦琐,可以在数组语法中使用对象语法:

<div > <div :></div> </div> <script> var app = new Vue ({ el: "#app", data: { isActive: ture, errorCls: 'error' } }) </script>

当然,与对象语法一样,也可以使用 data、computed 和 methods 三种方法,以计算属性为例:

<div > <button :></button> </div> <script> var app = new Vue ({ el: '#app', data: { size: 'large', disabled: true }, computed: { classes: function () { return [ 'btn', { ['btn-'this.size]: this.size !== '', ['btn-disabled']: this.disabled } ]; } } }) </script>

示例中的样式 btn 会始终应用,当数据 size 不为空时,会应用样式前缀 btn- ,后加 size 的值;当数据 disabled 为真时,会应用样式 btn-disabled,所以该示例最终渲染的结果为:

<button ></button>

使用计算属性给元素动态设置类名,在业务中经常用到,尤其是在写复用的组件时,所以在开发过程中,如果表达式较长或逻辑复杂,应该尽可能地优先使用计算属性。

三、在组件上使用

如果直接在组件上使用 class 或 :class ,样式规则会直接应用到这个组件的根元素上,例如声明一个简单的组件:

Vue.component('my-component', { template: '<p >我是个文本</p>' });

然后在调用这个组件时,应用上面的对象语法或数组语法给组件绑定 class ,以对象语法为例:

<div > <my-component :></my-component> </div> <script> var app = new Vue ({ el: "#app", data: { isActive: true } }) </script>

最终组件渲染后的结果为:

<p >我是个文本</p>

这种用法仅适用于自定义组件的最外层是一个根元素,否则会无效,当不满足这种条件或需要给具体的子元素设置类名时,应当使用组件的 props 来传递(这些用法同样适用于绑定内联样式 style 的内容)。

四、绑定内联样式

使用 v-bind:style (即 :style)可以给元素绑定内联样式,方法与 :class 类似,也有对象语法和数组语法,看起来很像直接在元素上写 CSS :

<div > <div :>我是个文本</div> </div> <script> var app = new Vue ({ el: "#app", data: { color: 'red', fontSize: 14 } }) </script>

CSS 属性名称使用驼峰命名 (camelCase)或短横分割命名(kebab-case),渲染后的结果为:

<div >红色文本</div>

大多数情况下,直接写一长串的样式不便于阅读和维护,所以一般写在 data 或 computed 里,以 data 为例改写下面的示例:

<div > <div :>我是一个红色的文本</div> </div> <script> var app = new Vue ({ el: "#app", data: { styles: { color: 'red', fontSize: 14'px' } } }) </script>

应用多个样式对象时,可以使用数组语法:

<div :>文本</div>

在实际业务中,:style 的数组语法并不常用,因为往往可以写在一个对象里面;而较为常用的应当时计算属性。

另外,使用 :style 时,Vue.js 会自动给特殊的 CSS 属性名称增加前缀,比如 transform 。

在笔记本电脑屏幕上的概念

    推荐阅读
  • 常规服装面料成分(运动服饰的面料)

    而涤纶成分,它的纤维强度更大,所以经多次穿着和洗涤后,不容易变形。保温性棉纤维具有较好的吸湿性,在正常的情况下,纤维可向周围的大气中吸收水分。但随着工艺的改进,一些改性涤纶的穿着舒适性,已得到了很大的改善。成本棉纤维是自然生长的产物,每年的产量高低和天气有很大关系。而涤纶是石油中提炼的,产量高低更容易控制。当然除了全棉和全涤材质,也有棉涤混纺或棉涤交织的面料所做成的运动服饰。

  • 地热放水的正确方法(地热放水的教程步骤)

    接下来我们就一起去了解一下吧!地热放水的正确方法首先找到地暖的分水器,将总阀与出水管保持平行,小水阀和出水管应保持垂直。之后关上总阀,并从左向右进行放水,放水时第一根分水管的小水阀保持不动,第二到第四根小水阀向右转90度进行放水,每一根分水管都要放水。接下来在放气口上接上一根塑料管,再将放气口的小螺丝向右旋进行放水,重复以上的操作,直到水放干净为止。

  • 阿迪耐克折扣店加盟哪种品牌靠谱(创业不知道做什么项目)

    特别是耐克,阿迪达斯这样的国际一线运动品牌,在运动领域,几乎没有对手。

  • 云顶之弈卡尔玛怎么玩(云顶之弈卡尔玛如何玩)

    基本信息:英雄:天启者,卡尔玛购买需要花费的金币数:3种族:暗星职业:秘术师技能:鼓舞:75/100,主动,接下来我们就来聊聊关于云顶之弈卡尔玛怎么玩?以下内容大家不妨参考一二希望能帮到您!云顶之弈卡尔玛怎么玩基本信息:英雄:天启者,卡尔玛。在战斗环节开始时,卡尔玛用灵链系住距离最近的一名友方英雄。卡尔玛为被系住的英雄提供持续护盾,吸收伤害。

  • 一个苹果含多少大卡热量(苹果的热量高吗)

    吃苹果注意事项:1、苹果不宜与海味同食。吃多了苹果反而不好,人体不仅不能吸收苹果的营养,还会加重肠胃的负担,苹果的保健作用很好,但是切记不要多吃,避免发生恶习呕吐,腹泻症状。

  • 往事越千年人生弹指间(弹指一挥间)

    人与人之间,人与人之间的交往、互动和服务,应该是友情的,应该是感恩的,应该是情感交融的。工程部主要搞维修,修护和水电气保障方面的事。保洁工最辛苦,保洁工每天都要清扫垃圾,就要捡垃圾,保洁环境,各个楼道、各个庭院都是他们活动和清理的范围,哪个地方稍有不干净都会扣工资,就会受到投诉,受到批评。岗守卫巡逻,都是做的相当不错的。

  • 东第二笔的名称(东第二笔的名称是什么)

    东的第二笔的名称是:撇折。“东”的古字形像两头用绳索扎住的口袋,是“橐”的初文。东的常用义是太阳升起的方向,引申指向东。东字构型说法不一。许慎认为是会意字,《说文·东部》:“从日在木中。”意思是太阳在“木”中,表示太阳刚刚升起,太阳升起的方向就是东方。与其说是树间的太阳,其实更像一个竹木编的笼子。金文条纹有所减省。“东”字的来龙去脉,可以说至今还是个未解之谜。

  • 冰墩墩和雪容融寓意(冰墩墩雪容融)

    2022年北京冬奥会吉祥物“冰墩墩”。而“墩墩”,则意喻敦厚、健康、活泼、可爱,契合熊猫的整体形象,象征着冬奥会运动员强壮的身体、坚韧的意志和鼓舞人心的奥林匹克精神。众所周知,熊猫是世界公认的中国国宝,形象友好可爱、憨态可掬,深受各国人民,尤其是青少年的喜爱。北京冬奥会和冬残奥会吉祥物,是一次中国文化与奥林匹克的精彩融合,是一次现代设计理念的传承与突破。全国党媒信息公共平台提供信息发布传播服务。

  • 阳台怎么给狗搭建小房子 小阳台如何装修成狗窝

    家里来了新朋友,是一只可爱的小狗,我们来给它建一个小房子吧最简单的方法就是准备一个大小合适的纸箱子,前后左右封闭式,留正面做门。然后在底层铺上棉垫子。这样一个简便的小窝就做好了。自己亲自动手做的想必更有家的感觉。在网上下载一个建造小房子的视频,准备充足合适的木料,一边看一边制作。还可以直接在网上买一个好看又使用的小房子,既省时间又省精力!建造小房子的方法还有很多,大家一起动手试试吧!

  • 牛肉大葱馅饺子做法家常(牛肉大葱馅水饺的做法)

    水饺,是中国北方民间的主食和地方小吃,也是年节食品。