Vue.js前端开发零基础教学(三)

目录

2.6 计算属性

2.7侦听器 

2.8 样式绑定 

2.8.1    绑定class属性

2.8.2    绑定style属性 

2.9 阶段案例——学习计划表 


2.6 计算属性

概念:Vue提供了计算属性来描述依赖响应式数据的复杂逻辑。 计算属性可以实时监听数据的变化,返回一个计算后的新值,并将计算结果缓存起来。只有计算属性中依赖的数据源变化了,计算属性才会自动重新求值,并重新加入缓存。

在组件中使用计算属性,分为以下2个步骤。

1. 定义计算属性

概念:计算属性通过computed()函数定义,该函数的参数为一个回调函数,开发者需要在回调函数中实现计算功能,并在计算完成后返回计算后的数据,语法格式如下。

<script setup>
import { computed } from 'vue'
const 计算属性名 = computed(() => {return 计算后的数据
})
</script>

2. 输出计算属性

将计算属性定义好后,可以使用Mustache语法输出计算属性,语法格式如下。 

{{ 计算属性名 }}

演示计算属性的使用方法

步骤:

创建src\components\yy.vue文件写入代码:

<template><p>初始message:{{ message }}</p><p>反转之后的message:{{ reversedMessage }}</p><button @click="updateMessage">更改</button>
</template>
<script setup>
import { ref, computed } from 'vue'
const message = ref('Hello World')
const reversedMessage = computed(() =>message.value.split('').reverse().join('')
)
const updateMessage = () => {message.value = 'hello'
}
</script>

 修改src\main.js文件,切换页面中显示的组件。

import App from './components/yy.vue'

运行结果: 

2.7侦听器 

概念:在Vue中,开发者可以自定义方法来进行数据的更新操作,但是不能自动监听数据的状态。如果想在数据更新后进行相应的操作,可以通过侦听器来实现。

侦听器通过watch()函数定义,watch()函数的语法格式如下。

watch(侦听器的来源, 回调函数, 可选参数)

watch()函数有3个参数,下面对这3个参数分别进行讲解。 第1个参数是侦听器的来源,侦听器的来源可以有以下4种。

一个函数,返回一个值。

一个响应式数据。

一个响应式对象。

一个由以上类型的值组成的数组。 

第2个参数是数据发生变化时要调用的回调函数,这个回调函数的第1个参数表示新值,即数据发生变化后的值,第2个参数表示旧值,即数据发生变化前的值。

第3个参数是可选参数,它是一个对象,该对象有以下2个常用选项。 deep:默认情况下,当侦听一个对象时,如果对象中的属性值发生了变化,则无法被监听到。如果想监听到,可以将该选项设为true,表示进行深度监听。该选项的默认值为false,表示不使用该选项。

immediate:默认情况下,组件在初次加载完毕后不会调用侦听器的回调函数,如果想让侦听器的回调函数立即被调用,则需要将选项设为true。该选项的默认值为false,表示不使用该选项。

演示侦听器的使用方法

创建src\components\yy.vue文件。

<template><input type="text" v-model="cityName">
</template>
<script setup>
import { watch, ref } from 'vue'
const cityName = ref('beijing')
watch(cityName, (newVal, oldVal) => {console.log(newVal, oldVal)
})
</script>

  修改src\main.js文件,切换页面中显示的组件。

import App from './components/yy.vue'

运行结果:

2.8 样式绑定 

概念:在Vue中,通过更改元素的class属性可以更改元素的样式,而对class属性的操作可以通过v-bind来实现。 使用v-bind绑定class属性时,可以将class属性值绑定为字符串、对象或数组,下面分别进行讲解。

2.8.1    绑定class属性

1. 将class属性值绑定为字符串

在Vue中,可以将class属性值绑定为字符串,示例代码如下。

<template><div v-bind:class="className"></div>
</template>
<script setup>
const className = 'box'
</script>

当上述代码运行后,div元素的渲染结果如下。

<div class="box"></div>

演示如何为class属性绑定字符串

 创建src\components\yy.vue文件输入代码:

<template><div v-bind:class="className">梦想</div>
</template>
<script setup>
const className = 'box'
</script>
<style>
.box {border: 1px solid black;
}
</style>

  修改src\main.js文件,切换页面中显示的组件。

import App from './components/yy.vue'

运行结果: 

 

2. 将class属性值绑定为对象

概念:在Vue中,可以将class属性值绑定为对象,从而动态地改变class属性值。对象中包含的属性名表示类名,属性值为布尔类型,如果属性值为true,表示类名生效,否则类名不生效。将class属性值绑定为对象的示例代码如下。

<template><div v-bind:class="{ className: isActive }"></div>
</template>
<script setup>
import { ref } from 'vue'
const isActive = ref(true)
</script>

运行上述代码后,div元素的渲染结果如下。

<div class="className"></div>

使用v-bind绑定的class属性可以与普通的class属性共存,示例代码如下。

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

 在上述代码中,当isActive为true时,div元素的渲染结果如下。

<div class="className1 className2"></div>

在使用v-bind绑定class属性时,如果不想将对象类型的class属性值直接写在模板中,可以将属性值定义成一个响应式对象或一个返回对象的计算属性,示例代码如下。

<template><div v-bind:class="classObject1"></div><div v-bind:class="classObject2"></div>
</template>
<script setup>
import { reactive, ref, computed } from 'vue'
const classObject1 = reactive({ className: true })
const isActive = ref(true)
const classObject2 = computed(() => ({className: isActive.value
}))
</script>
<script setup>
import { ref, reactive, computed } from 'vue'
const isBox = ref(true)
const isBorder = ref(true)
const isInner = ref(true)
const isMeal = ref(true)
const classObject = reactive({ inner: true })
const classMeal = computed(() => ({meal: isMeal.value
}))
</script>

演示如何为class属性绑定对象

创建src\components\yy.vue文件输入代码:

<template><div class="text" v-bind:class="{ box: isBox, border: isBorder }"><div v-bind:class="{ inner: isInner }">春夏</div><div v-bind:class="classObject">秋冬</div><div v-bind:class="classMeal">三餐四季~</div></div>
</template>
<script setup>
import { ref, reactive, computed } from 'vue'
const isBox = ref(true)
const isBorder = ref(true)
const isInner = ref(true)
const isMeal = ref(true)
const classObject = reactive({ inner: true })
const classMeal = computed(() => ({meal: isMeal.value
}))
</script>
<style>
.text {text-align: center;line-height: 30px;
}
.box {width: 100%;background: linear-gradient(white, rgb(239, 250, 86));
}
.border {  border: 2px dotted black; }
.inner {margin-top: 2px;width: 100px; height: 30px;border: 2px double black;
}
.meal {width: 100px; height: 30px;border: 2px dashed rgb(120, 81, 227);
}
</style>

  修改src\main.js文件,切换页面中显示的组件。

import App from './components/yy.vue'

运行结果:

3. 将class属性值绑定为数组

概念:在Vue中,v-bind指令中的class属性值除了字符串和对象外,还可以是一个数组,用以动态地切换HTML的class属性,数组中的每个元素为要绑定的类名。 将class属性值绑定为数组的示例代码如下。 

<template><div v-bind:class="[className1, className2]"></div>
</template>
<script setup>
import { ref } from 'vue'
const className1 = ref('active')
const className2 = ref('error')
</script>

运行上述代码后,div元素的渲染结果如下。

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

 如果想有条件地切换列表中的class,可以使用三元表达式,示例代码如下。

<div v-bind:class="[isActive ? className1 : className2]"></div>

当class有多个条件时,在数组语法中也可以使用对象语法,示例代码如下。

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

演示如何为class属性绑定数组

创建src\components\yy.vue文件。

<template><div v-bind:class="[activeClass, borderClass]"></div><div v-bind:class="[isActive ? activeClass : '', borderClass]"></div><div v-bind:class="[{ active: isActive }, borderClass]"></div>
</template>
<script setup>
import { ref } from 'vue'
const isActive = ref(true)
const activeClass = ref('active')
const borderClass = ref('border')
</script>
<style>
.active {width: 100px;height: 10px;margin-bottom: 2px;background-color: rgb(59, 192, 241);
}
.border {border: 2px solid rgb(0, 0, 0);
}
</style>

  修改src\main.js文件,切换页面中显示的组件。

import App from './components/yy.vue'

运行结果:

 

2.8.2    绑定style属性 

概念:在Vue中,通过更改元素的style属性也可以更改元素的样式,对style属性的操作也可以通过v-bind来实现。使用v-bind绑定style属性时,可以将style属性值绑定为对象或数组,下面分别进行讲解。

1. 将style属性值绑定为对象

在Vue中,将style属性值绑定为对象时,该对象中的属性名表示CSS属性名,属性值为CSS属性值。以对象语法绑定元素的style属性,示例代码如下。

<template><div v-bind:style="{ color: 'red', 'font-size': '30px' }"></div><div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
</template>
<script setup>
import { ref } from 'vue'
const activeColor = ref('red')
const fontSize = ref(30)
</script>

除了将对象直接定义在模板中,还可以将对象定义在<script>标签中,示例代码如下。

<template><div v-bind:style="styleObject"></div>
</template>
<script setup>
import { reactive } from 'vue';
const styleObject = reactive({color: 'red',fontSize: '12px'
})
</script>

演示如何为style属性绑定对象

 创建src\components\yy.vue文件。

<template><!-- 绑定样式属性值 --><div v-bind:style="{ 'background-color': pink, width: width, height: height + 'px' }"><!-- 三元表达式 --><div v-bind:style="{ backgroundColor: isBlue ? blue : 'black', width: '50px', height: '20px' }"></div><!-- 绑定样式对象 --><div v-bind:style="myDiv"></div></div>
</template>
<script setup>
import { ref, reactive } from 'vue'
const isBlue = ref(false)
const blue = ref('blue')
const pink = ref('pink')
const width = ref('100%')
const height = ref(40)
const myDiv = reactive({backgroundColor: 'red',  width: '50px',  height: '20px'
})
</script>

  修改src\main.js文件,切换页面中显示的组件。

import App from './components/yy.vue'

运行结果:

 

2. 将style属性绑定为数组

将style属性绑定为数组,可以实现将多个样式应用到同一个元素上,示例代码如下。

<div v-bind:style="[classObj1, classObj2]"></div>

在上述代码中,数组中的每一个元素都是一个对象,例如classObj1和classObj2,对象中包含CSS属性名和属性值。每个对象需要在<script>标签中定义。

演示如何为class属性绑定数组

 创建src\components\yy.vue文件。

<template><!-- 使用数组 --><div v-bind:style="[activeClass, borderClass]"></div><!-- 使用三元表达式 --><div v-bind:style="[isActive ? activeClass : '', borderClass]"></div><!-- 数组语法中使用对象语法 --><div v-bind:style="[{ backgroundColor: 'rgb(59, 192, 241)', height: '10px' }, borderClass]"></div>
</template>
<script setup>
import { ref, reactive } from 'vue'
const isActive = ref(true)
const activeClass = reactive({height: '10px',backgroundColor: 'rgb(59, 192, 241)'})const borderClass = reactive({border: '2px solid rgb(0, 0, 0)'
})
</script>

  修改src\main.js文件,切换页面中显示的组件。

import App from './components/yy.vue'

运行结果:

2.9 阶段案例——学习计划表 

概念:“学习计划表”用于对学习计划进行管理,包括对学习计划进行添加、删除、修改等操作。

1. 初始页面效果展示

当“学习计划表”案例打开后,页面中会展示学生的学习计划,包括学习科目、学习内容、学习地点、完成状态等。

1. 初始页面效果展示

页面上半部分为卡片区域,包含标题区域和表单区域。其中,标题区域中展示标题为“学习计划表”,表单区域中可以根据实际情况输入学习科目、学习内容、学习地点等内容,学习地点有3个选项,包括自习室、图书馆、宿舍,单击“添加”按钮即可添加学习计划,默认添加完成状态为“未完成”。 页面下半部分为表格区域,用于展示学习计划列表。在表单区域中添加并提交的信息会在表格区域中展示。学生可以在表格区域更改学习计划的完成状态为“已完成”或者“未完成”。

2. 添加学习计划页面效果展示

在表单区域中输入学习计划,学习科目为“JavaScript”,学习内容为“运算符”,学习地点为“图书馆”,单击“添加”按钮之后的页面效果如下图所示。

 

3. 修改学习计划完成状态的页面效果展示

将学习计划2的完成状态更改为“已完成”的页面效果如下图所示。

 4. 删除学习计划

当学习计划处于“已完成”状态时,学生可以对学习计划进行删除操作,否则不能进行删除操作。

vue.js第二章到此落幕,欢迎预览~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5cssjs代码 033 SVG元素示例

html5&css&js代码 033 SVG元素示例 一、代码二、解释 一个SVG图形&#xff0c;该图形由一个椭圆、一个圆形和一个矩形组成。 一、代码 <!DOCTYPE html> <html lang"zh-cn"> <head><title>编程笔记 html5&css&js SVG元素示例…

阿里云2024最新优惠:WoSign SSL证书首购4折

阿里云SSL证书 2024 最新优惠来啦&#xff01;阿里云SSL证书新用户&#xff0c;wosign SSL证书低至4折&#xff0c;WoSign SSL提供全球信任RSA SSL证书和国密算法SM2 SSL证书&#xff01;阿里云官网官方优惠&#xff0c;需要开年采购SSL证书的用户抓紧申请这波优惠&#xff01;…

C语言 swab 函数学习

swab函数交换字符串中相邻两个字节&#xff1b; void _swab( char *src, char *dest, int n ); char *src&#xff1a; 要拷贝、转换的字符串&#xff0c; char *dest&#xff0c;转换后存储到dest所表示的字符串&#xff0c; int n要拷贝、转换的字节数&#xff1b; 所…

uni-app纵向步骤条

分享一下项目中自封装的步骤条&#xff0c;存个档~ 1. 话不多说&#xff0c;先看效果 2. 话还不多说&#xff0c;上代码 <template><!-- 获取一个数组&#xff0c;结构为[{nodeName:"流程发起"isAudit:falsetime:"2024-02-04 14:27:35"otherDat…

好用的GPTs:指定主题搜索、爬虫、数据清洗、数据分析自动化

好用的GPTs&#xff1a;指定主题搜索、爬虫、数据清洗、数据分析自动化 Scholar&#xff1a;搜索 YOLO小目标医学方面最新论文Scraper&#xff1a;爬虫自动化数据清洗数据分析 点击 Explore GPTs&#xff1a; Scholar&#xff1a;搜索 YOLO小目标医学方面最新论文 搜索 Scho…

BI让数据分析不在困难,分解企业数据分析流程

一、数据培养 数据分析最关键的是什么&#xff1f;其实从名字上就可以看出来&#xff0c;数据是一切的关键&#xff0c;没有数据的话数据分析从何谈起呢。但数据的积累不是一天两天就能成功的&#xff0c;企业的一定要有培养数据的意识&#xff0c;在业务活动中沉淀数据&#…

学习笔记Day13:Linux进阶

Linux进阶 Vim——Linux自带的文本编辑器 功能强大 命令模式 使用 vim <file>进入后的默认模式可以上下左右移动光标 方向键/hjkl快速到所在行的开头^/末尾$向下移动30行30j&#xff08;上左右同&#xff09;上下翻页Ctrlf向上&#xff0c;Ctrlb向下翻页快速回到文件第…

基于SpringBoot+Layui的社区物业管理系统

项目介绍 社区物业管理系统是基于java程序开发,本系统分为业主和管理员两个角色 业主可以登陆系统,查看车位费用信息,查看物业费用信息,在线投诉,查看投诉,在线报修; 管理员可以车位收费信息,物业收费信息,投诉信息,楼宇信息,房屋信息,业主信息,车位信息,抄表信…

刚进公司第一天-电脑环境搭建

写在前面 之前在公司做过一次开发小工具的分享&#xff0c;这两天有个同事找我学习一些小工具开发的知识&#xff0c;但是我发现他的基础是真的差&#xff0c;想学开发知识却连自己本地电脑环境都没弄好&#xff0c;确实&#xff0c;有些人工作了很久&#xff0c;由于自己工作中…

工控机在机器人领域的应用丨工业一体机的应用

随着机器人技术的不断发展&#xff0c;机器人在制造、物流等领域得到了广泛应用。而工业控制计算机&#xff08;工控机&#xff09;作为机器人控制系统的核心设备&#xff0c;也在机器人领域发挥着越来越重要的作用。 机器人控制系统是机器人的核心部分&#xff0c;控制系统的…

综合知识篇15-开发管理考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html案例分析篇00-【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例…

仅用一个月,游卡完成从MySQL到上线OceanBase的实践

编者按&#xff1a;自2023年9月起&#xff0c;游卡——国内最早卡牌游戏研发者之一&#xff0c;开始测试OceanBase&#xff0c;并在短短两个月内成功将三个核心业务应用迁移至OceanBase上。究竟是何因素促使游卡放弃游戏行业普遍采用的MySQL方案&#xff0c;转而大胆选择OceanB…

国内ip切换是否合规?

在网络使用中&#xff0c;IP地址切换是一种常见的行为&#xff0c;可以用于实现隐私保护、访问地域限制内容等目的。然而&#xff0c;对于国内用户来说&#xff0c;IP地址切换是否合规一直是一个备受关注的话题。在中国&#xff0c;网络管理严格&#xff0c;一些IP切换行为可能…

Java安全 反序列化(3) CC1链-TransformedMap版

Java安全 反序列化(3) CC1链-TransformedMap版 本文尝试从CC1的挖掘思路出发&#xff0c;理解CC1的实现原理 文章目录 Java安全 反序列化(3) CC1链-TransformedMap版配置jdk版本和源代码配置前记 为什么可以利用一.CC链中的命令执行我们可以尝试一下通过InvokerTransformer.tr…

ssm项目(tomcat项目),定时任务(每天运行一次)相同时间多次重复运行job 的bug

目录标题 一、原因 一、原因 debug本地调试没有出现定时任务多次运行的bug&#xff0c;上传到服务器就出现多次运行的bug。&#xff08;war的方式部署到tomcat&#xff09; 一开始我以为是代码原因&#xff0c;或者是linux和win环境不同运行定时任务的方式不一样。 但是自己…

专业135+总分400+重庆邮电大学801信号与系统考研经验重邮电子信息与通信工程,真题,大纲,参考书。

今年分数出来还是比较满意&#xff0c;专业801信号与系统135&#xff0c;总分400&#xff0c;没想到自己也可以考出400以上的分数&#xff0c;一年的努力付出都是值得的&#xff0c;总结一下自己的复习心得&#xff0c;希望对大家复习有所帮助。专业课&#xff1a;&#xff08;…

获取KEGG通路的基因列表 做单细胞GSEA、GSVA分析

使用KEGG通路的基因列表进行单细胞GSEA GSVA分析的过程&#xff0c;我们需要遵循以下步骤&#xff1a; 获取KEGG通路的基因列表&#xff1a;这通常涉及使用专门的R包&#xff0c;如KEGGREST或biomaRt&#xff0c;来查询KEGG数据库并检索特定通路的基因列表。 准备单细胞表达数…

申请Github Education获取免费Copilot权限(2024.3.18实测成功)

起因&#xff1a;旧帐户Copilot权限被封 我已经离开Github Copilot就无法独自耐着性子写代码了&#xff08;懒惰AI成瘾性&#xff09;&#xff0c;这两天Github Copilot不知道为什么在大规模封号&#xff0c;我不幸也被封号了&#xff08;禁用掉了Github Copilot权限&#xff…

Python:柱状-折线图

写论文&#xff0c;需要画数据分析图&#xff1a; 用柱状图描述算法执行时间用折线图描述性能改进 示例代码&#xff1a; import numpy as np import matplotlib.pyplot as plt from matplotlib.pyplot import MultipleLocatorSecurity ["128", "192",…

Linux第82步_“gpio子系统”下的使用KEY开关灯

使用新字符设备驱动的一般模板和“gpio子系统”&#xff0c;以及设备树&#xff0c;驱动KEY和LED。 1、在stm32mp157d-atk.dts文件中添加“gpio_led”和“key0”节点 打开虚拟机上“VSCode”&#xff0c;点击“文件”&#xff0c;点击“打开文件夹”&#xff0c;点击“zgq”&…