Vue计算属性与监听器

文章目录

  • 计算属性配置项 computed
    • HTML 结构
    • Vue 实例
    • 数据
    • 方法
    • 计算属性
    • 绑定数据和方法
    • 完整代码
  • 监听器配置项 watch
    • 简单类型写法
    • 深度监听写法


计算属性配置项 computed

使用 Vue 实现一个商品价格计算器,设置一个初始单价,初始数量为 1,用户可以通过加减按钮修改数量,并实时计算出总价。

下面将一步步详细解释上述代码的实现过程

HTML 结构

首先,我们需要在 HTML 文件中添加一个 div 元素作为 Vue 应用的根元素,并给其一个 id 值作为挂载点:

<div id="app"><!-- 在这里添加商品价格计算器的 HTML 结构 -->
</div>

在这个 div 元素中,我们可以添加一个标题标签、三个段落标签,前两个段落标签显示单价和数量,第三个段落标签用于显示计算出来的总价,其中加减按钮用于增加或减少数量:

<h1>商品价格计算器</h1>
<p>单价:{{ price }}</p>
<p>数量: <button v-show="num>0" @click="minus">-</button>{{num}}<button @click="plus">+</button></p>
<p>总价:{{ total }}</p>

这里我们使用了 Vue 的模板语法,通过 {{ }} 将数据绑定到 HTML 中。

Vue 实例

接下来,在 JavaScript 文件中创建一个 Vue 实例,将其挂载到 HTML 页面中的 div#app 元素上:

<script src="../js/vue3.js"></script>
<script>let vm = Vue.createApp({data() {return {price: 998,num: 1}},methods: {minus(){this.num--},plus(){this.num++}},// 计算属性配置项 实际应用中 某个数据是需要使用data中其他数据计算得到computed:{// 计算属性的具体配置是函数形式total(){// 必须返回一个数据return this.num*this.price}}})vm.mount('#app')
</script>

在 Vue 实例的选项中,我们需要先定义一些数据和方法。

数据

首先,我们需要设置一个初始单价、初始数量和总价的值,这里我们设置单价为 998 元,数量为 1,总价为 998 元:

data() {return {price: 998,num: 1}
},

这里使用了 Vue 实例的 data 选项,用于定义数据和变量。

方法

接着,我们需要定义两个方法 plusminus,用于增加或减少商品数量,并且实时计算出总价:

methods: {minus(){this.num--},plus(){this.num++}
}

这里我们使用了 Vue 实例的 methods 选项,用于定义方法。

计算属性

使用 computed 选项定义一个计算属性 total,用于计算商品的总价,其中计算方法是将 num 值乘以 price 值:

computed:{// 计算属性的具体配置是函数形式total(){// 必须返回一个数据return this.num*this.price}
}

绑定数据和方法

最后,我们需要将定义好的数据和方法绑定到 HTML 页面中的模板语法中:

<p>单价:{{ price }}</p>
<p>数量: <button v-show="num>0" @click="minus">-</button>{{num}}<button @click="plus">+</button></p>
<p>总价:{{ total }}</p>

这里使用了 Vue 的模板语法,通过 {{ }} 将数据绑定到 HTML 中,通过 v-show@click 将方法绑定到按钮的点击事件上。

完整代码

综上,以下是完整的商品价格计算器代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>商品价格计算器</title>
</head>
<body><div id="app"><h1>商品价格计算器</h1><p>单价:{{ price }}</p><p>数量: <button v-show="num>0" @click="minus">-</button>{{num}}<button @click="plus">+</button></p><p>总价:{{ total }}</p><!-- 计算属性的使用直接通过插值语法使用 --></div><script src="../js/vue3.js"></script><script>let vm = Vue.createApp({data() {return {price: 998,num: 1}},methods: {minus(){this.num--},plus(){this.num++}},// 计算属性配置项 实际应用中 某个数据是需要使用data中其他数据计算得到computed:{// 计算属性的具体配置是函数形式total(){// 必须返回一个数据return this.num*this.price}}})vm.mount('#app')</script>
</body>
</html>

输出效果:
在这里插入图片描述


监听器配置项 watch

提示:这里可以添加本文要记录的大概内容:

监听器配置项:监听某个数据的变化
定义函数:函数名必须是监听的数据名
Vue 调用此函数时会传入两个参:新值、旧值

Vue3 的监听器可以监听 Vue 实例中某个数据的变化,当这个数据变化时,就会自动执行相应的函数,这样可以实现一些自动更新页面、数据校验等功能。

具体来说,监听器主要有以下作用:

  1. 自动更新页面:当 Vue 实例的某个数据变化时,监听器可以自动更新相关的页面内容,而不需要手动修改 DOM。

  2. 数据校验:当 Vue 实例中的某个数据变化时,可通过监听器对输入的数据进行校验,保证数据的有效性。

  3. 数据同步:当 Vue 实例中的某个数据绑定到多个组件中时,可通过监听器实现数据的同步,保证数据的一致性。

  4. 监控数据变化:当 Vue 实例中的某个数据发生变化时,通过监听器可以获取到新旧值,从而实现数据的监控和统计。

Vue3 监听器是 Vue3 中非常重要的一个特性,它可以让我们的开发变得更加高效和灵活,使得我们能够更好地处理和管理数据。

简单类型写法

【示例代码】:
让数据减到零不再往下减

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="app"><button @click="minus">-</button>{{num}}</div>
</body>
<script src="../js/vue3.js"></script>
<script>let vm = Vue.createApp({data() {return {num: 1}},methods: {minus(){this.num--}},})vm.mount('#app')
</script>
</html>

这段代码使用了 Vue3 的 createApp 方法创建了一个 Vue 实例 vm,实现了一个简单的计数器功能,点击按钮可以将 num 值递减。具体解释如下:

  1. 首先,使用 createApp 方法创建了一个 Vue 实例 vm,这个实例包含了 data、methods 等选项。

  2. 在 data 中定义了 num 属性,初始值为 1。

  3. 在 methods 中定义了一个 minus 方法,当按钮被点击时,会将 num 的值减 1。

  4. 最后,使用 vm.mount 方法将 Vue 实例挂载到页面上的 #app 元素上,使其生效。

但是现在可以减到负数

接下来加上监听器,用这种方式控制num的数量,到零就不在让他往下减

        // 监听器配置项:监听某个数据的变化watch: {// 定义函数 函数名必须是监听的数据名// Vue 调用此函数时会传入两个参 新值 旧值num(a,b){this.num = a<0?0:a// a<0吗?如果小于0正常赋值}}

深度监听写法

如果监听的事件在对象中,那么监听器的写法必须是深度监听写法

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="app"><button @click="minus">-</button>{{goods.num}}</div>
</body>
<script src="../js/vue3.js"></script>
<script>let vm = Vue.createApp({data() {return {goods: {num: 1}}},methods: {minus(){this.goods.num--}},// 监听器配置项:监听某个数据的变化watch: {// 如果监听的事件在对象中,那么监听器的写法必须是深度监听写法goods:{deep:true,handler(a,b){this.goods.num = a.num<0?0:a.num}}}})vm.mount('#app')
</script>
</html>

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

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

相关文章

Android之OkHttp框架的分析

Okhttp是Android开发常用的一个网络请求框架&#xff0c;下面将按照自己的理解将okhttp分为三条主线进行分析。 文章目录 使用方式OkHttp第一条主线&#xff1a;请求发送到哪里去了&#xff1f;OkHttp第二条主线&#xff1a;请求是如何被消费的&#xff1f;OkHttp第三条主线&a…

《PyTorch深度学习实践》第十讲 卷积神经网络(基础篇)

b站刘二大人《PyTorch深度学习实践》课程第十讲卷积神经网络&#xff08;基础篇&#xff09;笔记与代码&#xff1a;https://www.bilibili.com/video/BV1Y7411d7Ys?p10&vd_sourceb17f113d28933824d753a0915d5e3a90 上一讲中MNIST数据集的例子采用的是全连接神经网络&#…

ModaHub魔搭社区:向量数据库Milvus产品问题(三)

目录 Milvus 的数据落盘逻辑是怎样的&#xff1f; Mishards 推荐的配置是什么&#xff1f; Mishards 支持 RESTful API 吗&#xff1f; 什么是归一化&#xff1f;Milvus 中为什么有时候需要归一化&#xff1f; 为什么欧氏距离和内积在计算向量相似度时的结果不一致&#x…

算法与数据结构(六)

一、图 一、临接表 表示方法如下&#xff1a; 带权值的无向图的构建&#xff1a; #define MaxInt 32767 // 极大值 #define MVNum 100 // 最大定点数 typedef int ArcType; // 边的权值类型 typedef char VerTexType; // 顶点数据类型//弧(边)的结点结构 st…

当金融风控遇上人工智能,众安金融的实时特征平台实践

导读&#xff1a;随着企业数字化转型升级&#xff0c;线上业务呈现多场景、多渠道、多元化的特征。数据要素价值的挖掘可谓分秒必争&#xff0c;业务也对数据的时效性和灵活性提出了更高的要求。在庞大分散、高并发的数据来源背景下&#xff0c;数据的实时处理能力成为企业提升…

Maven中依赖使用范围

IDEA中help中show Log in Explorer可以查看idea日志 依赖使用范围 构建包含的流程&#xff1a;编译 &#xff0c;测试 &#xff0c;运行 &#xff0c;打包 &#xff0c;安装 &#xff0c;部署 comile test package install deploy 使用标签 1&#xff1a;compile 缺省值 伴随者…

VRP基础操作

目录 一、华为VRP 1.1、VRP介绍 1.2、设备管理接口 1.3、Console口登录 1.4、参数配置 二、华为VRP命令行基础 2.1、真机设备初始化启动 2.2、命令行视图 2.3、命令行功能 2.4、命令行在线帮助 2.5、配置系统时钟 2.6、配置标题消息 2.7、命令等级 2.8、用户界面…

突破性5G NTN技术,美格智能携手高通发布卫星物联网连接方案

通信技术的快速发展&#xff0c;使得万物互联成为现实&#xff0c;物联网深刻影响我们的生活方式。目前&#xff0c;全球物联网连接主要由WiFi、蓝牙和蜂窝网络等几类技术支撑。数据显示&#xff0c;蜂窝基站的陆地覆盖率约为20%&#xff0c;而海洋覆盖率则不到5%。 这意味着陆…

Docker数据卷与容器的挂载

什么是Docker数据卷: 数据卷&#xff08;Volumes&#xff09;是宿主机中的一个目录或文件&#xff0c;当容器目录和数据卷目录绑定后&#xff0c;对方的修改会立即同步。一个数据卷可以被多个容器同时挂载&#xff0c;一个容器也可以被挂载多个数据卷。简单来说数据卷本质其实是…

FPGA的软核、硬核、固核

“核” 现在的FPGA设计&#xff0c;规模巨大而且功能复杂&#xff0c;因此设计的每一个部分都从头开始是不切实际的。一种解决的办法是&#xff1a;对于较为通用的部分可以重用现有的功能模块&#xff0c;而把主要的时间和资源用在设计中的那些全新的、独特的部分。这就像是你在…

20kV高精度可调高压稳压测试电源的学习与使用

一&#xff1a;应用范围 A: 二极管反向耐压测试 B: 二极管反向漏电流测试 C: 高压电容耐压测试 D: 玻璃釉电阻非线性性能测试 E:氙灯击穿电压测试 F: 材料耐压测试 二、特点 高精度恒流恒压高压输出源 它拥有0~20kV的电压输出能力, 0.005%的电压分辨率精度, 0.1uA的电 …

mysql——存储过程

目录 存储过程存储过程的优点创建存储过程调用存储过程查看存储过程查看存储过程的详细信息查看存储过程的属性 存储过程的参数删除存储过程存储过程控制语句 存储过程 存储过程是一组为了完成特定功能的SQL语句集合存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句…