Vue动态样式

news/2024/11/29 5:35:34/

1.1动态class

用v-bind给标签class设置动态的值

  • 语法:

  • :class="{类名: 布尔值}"

<template><div><!-- 语法::class="{类名: 布尔值}"使用场景: vue变量控制标签是否应该有类名--><p :class="{red_str: bool}">动态class</p></div>
</template>
​
<script>
export default {data(){return {bool: true}}
}
</script>
​
<style scoped>.red_str{color: red;}
</style>

就是把类名保存在vue变量中赋予给标签

代码演示2:

<template><div><!-- 语法::class="{类名: 布尔值}"使用场景: vue变量控制标签是否应该有类名--><p :class="{red_str: bool}">动态class</p><p :class="{red_str: bool,helloWorld: bool}">hello和class</p><!--使用对象模式添加--><p :class="classObj">helloWorld</p>
​</div>
</template>
<script>
export default {data(){return{bool:true,classObj:{red_str:true,helloWorld:true}};}
};
</script>
<style scoped>
.red_str{color: red;}
.helloWorld{background-color: aqua;
}
</style>

1.2 动态style

给标签动态设置style的值CSS property 名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用引号括起来) 来命名

  • 语法

  • :style="{css属性: 值}"

<template><div><p style="color:red">基本style</p><!-- 动态style语法:style="{css属性名: 值}"--><p :style="{backgroundColor: colorStr}">动态style</p><p :style="{color: colorStr,fontSize:fontSize,'backgroundColor':bgColor}">动态style之多个style</p><!--多个样式抽取--><p :style="styleObj">样式抽取后的style</p></div>
</template>
<script>
export default {data(){return{colorStr: 'red',fontSize:'40px',bgColor:'pink',styleObj:{color: 'red',fontSize:'40px','backgroundColor':'pink' }}}
}
</script>

动态style的key都是css属性名

1.3 案例-品牌管理(铺)

数据铺设

  • 需求1: 把默认数据显示到表格上

  • 需求2: 注意资产超过100的, 都用红色字体标记出来

细节:

① 先铺设静态页面

② 此案例使用bootstrap, 需要下载, 并导入到工程main.js中

③ 用v-for配合默认数据, 把数据默认铺设到表格上显示

④ 直接在标签上, 大于100价格, 动态设置red类名

图示:

1.因为案例使用了bootstrap, 工程化开发, 模块化用npm/yarn下载引入使用

npm install bootstrap

2.在main.js - 引入bootstrap

import "bootstrap/dist/css/bootstrap.css" 
// 默认找文件夹下的index文件(但是这个不是所以需要写路径)

模板代码

<template><div><div class="container"><!-- 顶部框模块 --><div class="form-group"><div class="input-group"><h4>品牌管理</h4></div></div>
​<!-- 数据表格 --><table class="table table-bordered table-hover mt-2"><thead><tr><th>编号</th><th>资产名称</th><th>价格</th><th>创建时间</th><th>操作</th></tr></thead><tbody><tr ><td></td><td></td>
​<!-- 如果价格超过100,就有red这个类 --><td class="red"></td><td></td><td><a href="#" >删除</a></td></tr></tbody></table>
​<!-- 添加资产 --><form class="form-inline"><div class="form-group"><div class="input-group"><inputtype="text"class="form-control"placeholder="资产名称"/></div></div>&nbsp;&nbsp;&nbsp;&nbsp;<div class="form-group"><div class="input-group"><inputtype="text"class="form-control"placeholder="价格"/></div></div>&nbsp;&nbsp;&nbsp;&nbsp;<!-- 阻止表单提交 --><button class="btn btn-primary">添加资产</button></form></div></div>
</template>
​
<script>
​
export default {data() {return {name: "", // 名称price: 0, // 价格list: [{ id: 100, name: "外套", price: 199, time: new Date('2010-08-12')},{ id: 101, name: "裤子", price: 34, time: new Date('2013-09-01') },{ id: 102, name: "鞋", price: 25.4, time: new Date('2018-11-22') },{ id: 103, name: "头发", price: 19900, time: new Date('2020-12-12') }],};},
​
};
</script>
​
<style >
.red{color: red;
}
</style>

==正确代码, 不可复制==

<template><div><div class="container"><!-- 顶部框模块 --><div class="form-group"><div class="input-group"><h4>品牌管理</h4></div></div>
​<!-- 数据表格 --><table class="table table-bordered table-hover mt-2"><thead><tr><th>编号</th><th>资产名称</th><th>价格</th><th>创建时间</th><th>操作</th></tr></thead><tbody><tr v-for="obj in list" :key="obj.id"><td>{{ obj.id }}</td><td>{{ obj.name }}</td>
​<!-- 如果价格超过100,就有red这个类 --><td :class="{red: obj.price > 100}">{{ obj.price }}</td><td>{{ obj.time }}</td><td><a href="#" >删除</a></td></tr></tbody></table><!-- 添加资产 --><form class="form-inline"><div class="form-group"><div class="input-group"><inputtype="text"class="form-control"placeholder="资产名称"/></div></div>&nbsp;&nbsp;&nbsp;&nbsp;<div class="form-group"><div class="input-group"><inputtype="text"class="form-control"placeholder="价格"/></div></div>&nbsp;&nbsp;&nbsp;&nbsp;<br><!-- 阻止表单提交 --><button class="btn btn-primary">添加资产</button></form></div></div>
</template>
<script>
// 1. 明确需求
// 2. 标签+样式+默认数据
// 3. 下载bootstrap, main.js引入bootstrap.css
// 4. 把list数组 - 铺设表格
// 5. 修改价格颜色
export default {data() {return {name: "", // 名称price: 0, // 价格list: [{ id: 100, name: "外套", price: 199, time: new Date('2010-08-12')},{ id: 101, name: "裤子", price: 34, time: new Date('2013-09-01') },{ id: 102, name: "鞋", price: 25.4, time: new Date('2018-11-22') },{ id: 103, name: "头发", price: 19900, time: new Date('2020-12-12') }],};},
};
</script>
<style scoped>
.red{color: red;
}
</style>

1.4 案例-品牌管理(增)

数据新增

  • 需求1: 实现表单数据新增进表格功能

  • 需求2: 判断用户输入是否为空给提示

  • 分析① 添加资产按钮 – 绑定点击事件② 给表单v-model绑定vue变量收集用户输入内容③ 添加数组到数组中④ 判断用户内容是否符合规定

图示:

在上个案例代码基础上接着写

==正确代码,不可复制==

<!-- 添加资产 --><form class="form-inline"><div class="form-group"><div class="input-group"><inputtype="text"class="form-control"placeholder="资产名称"v-model="name"/></div></div>&nbsp;&nbsp;&nbsp;&nbsp;<div class="form-group"><div class="input-group"><inputtype="text"class="form-control"placeholder="价格"v-model.number="price"/></div></div>&nbsp;&nbsp;&nbsp;&nbsp;<!-- 4. 阻止表单提交(刷新网页数据又回去了) --><button class="btn btn-primary" @click.prevent="addFn">添加资产</button></form>
​
<script>
// 目标: 新增
// 1. 按钮 - 事件
// 2. 给表单v-model绑定vue变量
export default {// ...省略其他methods: {addFn(){// 5. 判断是否为空if (this.name.trim().length === 0 || this.price === 0) {alert("不能为空")return}// 3. 把值以对象形式-插入listthis.list.push({// 当前数组最后一个对象的id+1作为新对象id值id: this.list[this.list.length - 1].id + 1,name: this.name,price: this.price,time: new Date()})}}
};
</script>

1.5 案例-品牌管理(删)

目标: 数据删除

  • 需求1: 点击删除的a标签, 删除数据

  • 需求2: 删除没数据了要提示暂无数据的tfoot

  • 分析① a标签绑定点击事件② 给事件方法传id③ 通过id, 找到对应数据删除④ 删除光了要让tfoot显示⑤ 删除光了再新增, 有bug(id值问题)需要修复

在上个案例代码基础上接着写

正确的代码(==不可复制==)

<td><a href="#" @click="delFn(obj.id)">删除</a></td><script>
// 目标: 删除功能
// 1. 删除a标签-点击事件
// 2. 对应方法名
// 3. 数据id到事件方法中
// 4. 通过id, 找到这条数据在数组中的下标
// 5. splice方法删除原数组里的对应元素
// 6. 设置tfoot, 无数据给出提示
// 7. 无数据再新增, id要判断一下
export default {// ...其他代码methods: {// ...其他代码delFn(id){// 通过id找到这条数据在数组中下标let index = this.list.findIndex(obj => obj.id === id)this.list.splice(index, 1)}}
};
</script>
​
bug解决方式:
<script>// 解决bug: 无数组新增-list没有数据, id需要给一个固定值(以后id都是后台生成, 现在是模拟给一个id)let id = this.list.length > 0 ? this.list[this.list.length - 1].id + 1 : 100// 3. 把值以对象形式-插入listthis.list.push({// 当前数组最后一个对象的id+1作为新对象id值id: id,name: this.name,price: this.price,time: new Date()})</script>

整体代码展示:

<template><div><div class="container"><!-- 顶部框模块 --><div class="form-group"><div class="input-group"><h4>品牌管理</h4></div></div>
​<!-- 数据表格 --><table class="table table-bordered table-hover mt-2"><thead><tr><th>编号</th><th>资产名称</th><th>价格</th><th>创建时间</th><th>操作</th></tr></thead><tbody><tr v-for="obj in list" :key="obj.id"><td>{{ obj.id }}</td><td>{{ obj.name }}</td>
​<!-- 如果价格超过100,就有red这个类 --><td :class="{red: obj.price > 100}">{{ obj.price }}</td><td>{{ obj.time }}</td><td><a href="#" @click="delFn(obj.id)">删除</a></td></tr></tbody>
​<tfoot ><tr><td colspan="5" style="text-align: center">暂无数据</td></tr></tfoot></table>
​<!-- 添加资产 --><form class="form-inline"><div class="form-group"><div class="input-group"><input  type="text"  class="form-control"  placeholder="资产名称"  v-model="name"/></div></div>&nbsp;&nbsp;&nbsp;&nbsp;<div class="form-group"><div class="input-group"><inputtype="text"class="form-control"placeholder="价格"v-model.number="price"/></div></div>&nbsp;&nbsp;&nbsp;&nbsp;<br><!-- 阻止表单提交 --><button class="btn btn-primary"  @click.prevent="addFn">添加资产</button></form></div></div>
</template>
​
<script>
// 1. 明确需求
// 2. 标签+样式+默认数据
// 3. 下载bootstrap, main.js引入bootstrap.css
// 4. 把list数组 - 铺设表格
// 5. 修改价格颜色
export default {data() {return {name: "", // 名称price: 0, // 价格list: [{ id: 100, name: "外套", price: 199, time: new Date('2010-08-12')},{ id: 101, name: "裤子", price: 34, time: new Date('2013-09-01') },{ id: 102, name: "鞋", price: 25.4, time: new Date('2018-11-22') },{ id: 103, name: "头发", price: 19900, time: new Date('2020-12-12') }],};},methods:{addFn(){// 5. 判断是否为空if (this.name.trim().length === 0 || this.price === 0) {alert("不能为空")return}// 解决bug: 无数组新增-list没有数据, id需要给一个固定值(以后id都是后台生成, 现在是模拟给一个id)let id = this.list.length > 0 ? this.list[this.list.length - 1].id + 1 : 100// 3. 把值以对象形式-插入listthis.list.push({// 当前数组最后一个对象的id+1作为新对象id值id: id,name: this.name,price: this.price,time: new Date()})},delFn(id){// 通过id找到这条数据在数组中下标let index = this.list.findIndex(obj => obj.id === id)this.list.splice(index, 1)}}
​
};
</script>
​
<style scoped>
.red{color: red;
}
</style>

http://www.ppmy.cn/news/389931.html

相关文章

RabbitMQNote (服务异步通信集群解决方案)

RabbitMQNote (服务异步通信集群解决方案) 1.消息可靠性(至少被消费一次)1.1.生产者消息确认(publisher confirm机制)1.1.1.修改配置1.1.2.定义Return回调1.1.3.定义ConfirmCallback1.2.消息持久化1.2.1.交换机持久化1.2.2.队列持久化1.2.3.消息持久化1.3.消费者消息确认…

华为OD机试真题 JavaScript 实现【租车骑绿道】【2023Q1 100分】

一、题目描述 部门组织绿岛骑行团建活动&#xff0c;租用公共双人自行车骑行&#xff0c;每辆自行车最多坐两人、最大载重 M。 给出部门每个人的体重&#xff0c;请问最多需要租用多少双人自行车。 二、输入描述 第一行两个数字 m、n&#xff0c;自行车限重 m&#xff0c;代…

Matplotlib学习

文章目录 Matplotlib曲线图的绘制饼图的绘制直方图的绘制散点图的绘制 Matplotlib 在深度学习的实验中&#xff0c;图形的绘制和数据的可视化非常重要。Matplotlib是用于绘制图形的库&#xff0c;使用Matplotlib可以轻松地绘制图形和实现数据的可视化。这里&#xff0c;我们来…

家用计算机硬件升级方案,旧电脑如何升级?旧电脑配置升级推荐方案

不少用户对陪伴已久的电脑有了感情&#xff0c;不想去购买新的电脑。而是想为旧电脑升级配置继续使用。旧电脑升级配置并不简单&#xff0c;需要考虑到硬件性能和兼容性。那么下面就让小编为大家带来旧电脑配置升级推荐方案。 1.旧电脑想要升级&#xff0c;大家姑且不用考虑升级…

电脑开机计算机配置,电脑开机显示正在配置更新请勿关闭计算机 重新启动之后,电脑里的数...

电脑开机显示正在配置更新请勿关闭计算机 重新启动之后,电脑里的数以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 电脑开机显示正在配置更新请勿关闭计算机 重新启动之后,电脑里的数 安全模式下进入会显示配置…

计算机基本配置要求,Windows10系统对电脑的标准配置要求

Windows10预览版已经推出有一个多月了&#xff0c;Windows8系统已经停止了零售版&#xff0c;因此越来越多的用户选择的Windows10系统&#xff0c;但是有一个问题就出现了&#xff0c;Windows10系统对电脑的配置要求怎样&#xff1f;所需的标准配置是怎样的&#xff1f; Window…

计算机配置 主板,计算机主板(怎样查看电脑主板配置)

计算机主板(怎样查看电脑主板配置) 近日&#xff0c;有小伙伴私信我问她的电脑用了有些年头的&#xff0c;很是卡顿&#xff0c;需要更换什么硬件才能较好地提升性能。因为是线上百思特网咨询我&#xff0c;所以只能让对方想截下电脑的硬件配置图发给我初步了解下&#xff0c;方…

低配电脑升级怎么升好,求解?

较新的电脑&#xff0c;建议的升级顺序是内存>硬盘>CPU&#xff08;主板&#xff09;>显卡。 较旧的电脑&#xff0c;建议的升级顺序是CPU&#xff08;主板&#xff09;>内存>硬盘>显卡。 CPU&#xff08;主板&#xff09;&#xff1a;性价比低 较新的电脑…