Vue3基础语法(三)

news2024/11/16 20:44:32

文章目录

    • 认识计算属性
      • 案例
      • methods vs computed
      • setter getter
    • watch
      • 侦听器的基本配置
      • 其他方式
    • 综合案例

在这里插入图片描述在这里插入图片描述

认识计算属性

在这里插入图片描述
在这里插入图片描述

案例

在这里插入图片描述

插值语法实现:
在这里插入图片描述

以上代码不好维护,多次使用会出现重复代码

methods实现:
在这里插入图片描述
computed实现案例

在这里插入图片描述

methods vs computed

在这里插入图片描述
在这里插入图片描述

setter getter

在这里插入图片描述

watch

在这里插入图片描述在这里插入图片描述

watch一般监听data或者props的属性

基本使用

<body>
    <div id="app"></div>
    <template id="my-app">
        <input type="text" v-model="question">
        <button @click="queryAnswer">搜索</button>
        <!-- <p>{{queryAnswer()}}</p> -->
    </template>

    <script src="../js/vue.js"></script>
    <script>
        const App = {
            template: '#my-app',
            data() {
                return {
                    question: "hello world"
                }
            },
            watch: {
                question(newValue, oldValue) {
                    console.log(newValue, oldValue)
                    this.queryAnswer()
                }
            },
            methods: {
                queryAnswer() {
                    console.log(`你的问题是${this.question}, 答案是:呵呵哈哈哈`)
                    return `你的问题是${this.question}, 答案是:呵呵哈哈哈`
                }
            },
        }

        Vue.createApp(App).mount("#app")
    </script>
</body>

侦听器的基本配置

<body>
    <div id="app"></div>
    <template id="my-app">
        <h2>{{info.name}}</h2>
        <button @click="changeInfo">修改info</button>
        <button @click="chagneInfoName">修改info.name</button>
    </template>

    <script src="../js/vue.js"></script>
    <script>
        const App = {
            template: '#my-app',
            data() {
                return {
                    info: {
                        name: "why"
                    }
                }
            },
            watch: {
                // 默认情况下 只会针对监听数据本身的改变(内部发生的改变不能监听)
                // info(newValue, oldValue) {
                //     console.log(newValue, oldValue)
                // }
                // 深度监听/立即执行(一定会执行一次)
                info: {
                    handler: function (newValue, oldValue) {
                        console.log(newValue, oldValue)
                    },
                    deep: true,  // 此时打印出的新旧值一样 是因为引用类型 若想不一样  需要深拷贝
                    immediate: true
                }
            },
            methods: {
                changeInfo() {
                    this.info = { name: "zhangsan", age: 18 }
                },
                chagneInfoName() {
                    this.info.name = "lisi"
                }
            },
        }

        Vue.createApp(App).mount("#app")
    </script>
</body>

其他方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

综合案例

在这里插入图片描述
代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
</head>

<body>
    <div id="app"></div>
    <template id="my-app">
        <template v-if="books.length > 0">
            <table>
                <thead>
                    <th></th>
                    <th>书籍名称</th>
                    <th>出版日期</th>
                    <th>价格</th>
                    <th>购买数量</th>
                    <td>操作</td>
                </thead>
                <tbody>
                    <tr v-for="(book, index) in books" :key="book.id">
                        <td>{{index + 1}}</td>
                        <td>{{book.name}}</td>
                        <td>{{book.date}}</td>
                        <td>{{formatPirce(book.price)}}</td>
                        <td>
                            <button :disabled="book.count <= 1" @click="decrement(index)">-</button>
                            <span class="counter">{{book.count}}</span>
                            <button @click="increment(index)">+</button>
                        </td>
                        <td>
                            <button @click="remove(index)">移除</button>
                        </td>
                    </tr>
                </tbody>
            </table>
            <h2>总价:{{formatPirce(totalPrice)}}</h2>
        </template>
        <template v-else>
            <h2>购物车为空~</h2>
        </template>
    </template>

    <script src="../js/vue.js"></script>
    <script src="index.js"></script>
</body>

</html>
Vue.createApp({
    template: '#my-app',
    data() {
        return {
            books: [
                { id: 1, name: "《算法导论》", date: "2003-12", price: 85.00, count: 1 },
                { id: 2, name: "《UNIX编程艺术》", date: "2003-12", price: 59.00, count: 1 },
                { id: 3, name: "《编程珠玑》", date: "2002-08", price: 39.00, count: 1 },
                { id: 4, name: "《代码大全》", date: "2003-02", price: 128.00, count: 1 },
            ],
            total: 0
        }
    },
    computed: {
        totalPrice() {
            let finalPrice = 0
            for (let book of this.books) {
                finalPrice += book.price * book.count
            }

            return finalPrice
        }
    },
    methods: {
        increment(index) {
            this.books[index].count++
        },
        decrement(index) {
            this.books[index].count--
        },
        remove(index) {
            this.books.splice(index, 1)
        },
        formatPirce(price) {
            return "¥" + price
        }
    },
}).mount("#app")

table {
    border: 1px solid #e9e9e9;
    border-collapse: collapse;
    border-spacing: 0;
}

th, td {
    padding: 8px 16px;
    border: 1px solid #e9e9e9;
    text-align: left;
}

th {
    background-color: #f7f7f7;
    color: #5c6b77;
    font-weight: 600;
}

.counter {
    margin: 0 5px;
}

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

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

相关文章

【深度思考】如何优雅的校验参数?

在日常的开发工作中&#xff0c;为了保证落库数据的完整性&#xff0c;参数校验绝对是必不可少的一部分&#xff0c;本篇文章就来讲解下在项目中该如何优雅的校验参数。 假设有一个新增学员的接口&#xff0c;一般第一步我们都会先校验学员信息是否正确&#xff0c;然后才会落…

为什么硬盘在macbook上无法编辑?mac不能往移动硬盘拷东西

为什么硬盘在macbook上无法编辑&#xff1f;如果您只想在Mac上查看NTFS文件&#xff0c;只需将NTFS 外置存储设备连接到mac电脑并查看文件。但要编辑或传输文件&#xff0c;则需要NTFS工具。 NTFS文件格式与Mac不兼容&#xff0c;但许多用户仍然喜欢使用NTFS文件&#xff0c;而…

Xshell及Xftp安装配置实现对Linux的远程登录

为什么要远程登录&#xff1f; Linux服务器是小组共享的 正式上线的项目是运行在公网上的 具体的结构图如下图所示&#xff1a; 准备工作 注意&#xff0c;商业用途的Xshell和Xftp是需要收费的&#xff0c;因此&#xff0c;我们下载免费的个人版本即可。 登录官网&#x…

:沉寂6个月,高薪不再是梦,这一次,我赢了......

前言 六个月对于人的一生来说是极其短暂的&#xff0c;有的人迷迷糊糊、浑浑噩噩的就过去了&#xff0c;有的人让其虚度在游戏中&#xff0c;有的人在不喜欢的岗位上日复一日。 但&#xff0c;总有一部分人会选择用来提升自己、或是探索未知领域掌握新的技能&#xff0c;而我…

Promise难懂?一篇文章让你轻松驾驭

前言 前端js学习中&#xff0c;让大家最难受的就是异步的问题&#xff0c;解决异步、回调地狱等问题时你必须得学会promise&#xff0c;对于多数前端程序员来说promise简直就是噩梦&#xff0c;本篇文章就是从通俗易懂的角度做为切入点&#xff0c;帮助大家轻松掌握promise 异步…

如何使用报表工具FastReport VCL 设计器中的 PDF/A?

Fastreport是目前世界上主流的图表控件&#xff0c;具有超高性价比&#xff0c;以更具成本优势的价格&#xff0c;便能提供功能齐全的报表解决方案&#xff0c;连续三年蝉联全球文档创建组件和库的“ Top 50 Publishers”奖。 慧都科技是Fast Reports在中国区十余年的友好合作…

0基础学python容易吗?零基础学习路线目标

零基础Python学习路线及阶段学习目标&#xff0c;首先应该夯实Python核心基础、Web前端编程、Django开发框架、Flask开发框架、爬虫与数据分析等知识&#xff0c;理解机器学习相关的基本概念及系统处理流程。 零基础Python学习路线及阶段学习目标&#xff1a; 阶段一、Python核…

【React学习】React更新渲染原理

当我们调用 setState 之后发生了什么&#xff1f;react经历了怎样的过程将新的 state 渲染到页面上&#xff1f; 一次react更新&#xff0c;核心就是对虚拟dom进行diff&#xff0c;找出最少的需要变化的dom节点&#xff0c;然后对其进行相应的dom操作&#xff0c;用户即可在页…

亲子游小程序开发,助力商家掌握亲子流量

随着新生代父母越来越年轻化&#xff0c;育儿观念上也发生了很大改变&#xff0c;当代父母已经不在单纯的关注孩子的学习情况&#xff0c;学习固然重要但是孩子的身心健康也是非常重要的。所以很多父母开始带着自己的孩子参加各种各样的亲子活动&#xff0c;多参加亲子活动可以…

Python数据分析之Pandas库

Python数据分析之Pandas库一、Pandas简介二、Pandas库的安装三、Pandas的数据结构四、Series 和 DataFrame 数据结构的使用五、其他可以参考的网站一、Pandas简介 Pandas是python的一个数据分析包&#xff0c;最初由AQR Capital Management于2008年4月开发&#xff0c;并于200…

Struts2框架中的Action接口和ActionSupport类

Struts2框架中的Action接口和ActionSupport类1、Action接口2、ActionSupport类3、登录案例3.1、页面3.2、控制器3.3、struts.xml配置3.4、测试1、Action接口 Action是Struts2框架的核心&#xff0c;因为它们适用于任何MVC&#xff08;Model View Controller&#xff09;框架。…

【Maven基础】单一架构案例(二)

第三节 搭建环境&#xff1a;事务控制 1、总体思路 2、TransactionFilter 2.1、创建 Filter 类 2.2、TransactionFilter 完整代码 public class TransactionFilter implements Filter {// 声明集合保存静态资源扩展名private static Set<String> staticResourceExtNam…

长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的实践技术应用

【查看原文】长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的实践技术应用 植被是陆地生态系统中最重要的组分之一&#xff0c;也是对气候变化最敏感的组分&#xff0c;其在全球变化过程中起着重要作用&#xff0c;能够指…

云知声: 基于 JuiceFS 的超算平台存储实践

云知声从一家专注于语音及语言处理的技术公司&#xff0c;现在技术栈已经发展到具备图像、自然语言处理、信号等全栈式的 AI 能力&#xff0c;是国内头部人工智能独角兽企业。公司拥抱云计算&#xff0c;在智慧医疗、智慧酒店、智慧教育等方面都有相应的解决方案。 Atlas 是云知…

技术栈入门------RabbitMQ

Direct交换机是路由键精准匹配 Fanout交换机是不看路由键 &#xff0c;只要你消息发给了某个交换机&#xff0c;这个交换机就立马把消息转给绑定了这个交换机的所有队列&#xff0c;所以速度最快 Topic交换机可以把一个消息根据交换机和消息队列的绑定的路由键进行匹配&#xf…

没有二十年功力,写不出Thread.sleep(0)这一行“看似无用”的代码!

你好呀&#xff0c;我是喜提七天居家隔离的歪歪。 这篇文章要从一个奇怪的注释说起&#xff0c;就是下面这张图&#xff1a; 我们可以不用管具体的代码逻辑&#xff0c;只是单单看这个 for 循环。 在循环里面&#xff0c;专门有个变量 j&#xff0c;来记录当前循环次数。 第…

项目实战之旅游网(一)项目介绍 项目搭建

目录 一.项目介绍 1.功能介绍 2.技术选型 3.实体类 二.项目搭建 1.创建项目 2.adminLTE 3.编写后端首页 4.提取统一后台模板 5.重构后台首页 ************************************************************************* 项目代码地址&#xff1a;等写完这个项目我…

jsoup

1.什么是jsoup jsoup&#xff1a;Java HTML解析器&#xff0c;专为HTML编辑&#xff0c;清理&#xff0c;抓取和XSS安全而构建 2.依赖 <dependency><!-- jsoup HTML parser library https://jsoup.org/ --><groupId>org.jsoup</groupId><artifac…

干货!深入学习必学的模型微调

学习目标 知道微调的原理能够利用微调模型来完成图像的分类任务1.微调 如何在只有6万张图像的MNIST训练数据集上训练模型。学术界当下使用最广泛的大规模图像数据集ImageNet&#xff0c;它有超过1,000万的图像和1,000类的物体。然而&#xff0c;我们平常接触到数据集的规模通…

浅析JWT

Cookie-session 我们都知道JWT一般用于用户登录等需要记住的操作&#xff0c;在谈论JWT之前就不得不谈谈以前的cookie-session登录了 。因为http协议是一种无状态协议&#xff0c;即每次服务端接收到客户端的请求时&#xff0c;都是一个全新的请求&#xff0c;服务器并不知道客…