Vue (3)

news2024/12/27 19:46:32

文章目录

  • 1. 数据代理
    • 1.1 回顾
    • 1.2 开始
  • 2. 事件处理
    • 2.1 v-on:click 点击事件
    • 2.2 事件修饰符
    • 2.3 键盘事件
  • 3. 计算属性
    • 3.1 插值语法实现
    • 3.2 methods实现
    • 3.3 计算属性实现
  • 4. 监视属性
    • 4.1 深度监视
    • 4.2 监视属性的简写形式
    • 4.3 watch 与 computed 对比

1. 数据代理


在学习 数据代理 时 先来回顾一下 Object中的 defineProperty方法.

1.1 回顾


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


回顾完 defineProperty 方法后 下面来学习一下数据代理

1.2 开始


数据代理定义 : 通过一个对象代理对另一个对象中属性的操作 读 / 写


给以场景 : 有两个对象 obj 和 obj2 , obj 含有 x , obj2 含有 y , 我想要 obj2 可以读到 obj 的 x ,还能修改 obj 的 x , 请问如何做 ?


答 : 这里就可以使用 defineProperty 完成 ,这就是一个简单的数据代理

<!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>理解数据代理</title>
</head>

<body>
    <script>
        let obj = {
            x: 100
        }
        let obj2 = {
            y: 200
        }


        // 通过 obj2 读到 x  和 修改 x

        Object.defineProperty(obj2, 'x', {
            get() {
                return obj.x
            },
            set(value) {
                obj.x = value
            }
        })
    </script>
</body>

</html>


效果 :

在这里插入图片描述


此时我们就明白了啥是数据代理了 ,下面来看看 Vue 中的 数据代理

在这里插入图片描述


通过 : 修改 name 引出 vm_data 与 我们传递的 data 是 同一个

在这里插入图片描述


小补充 :

在这里插入图片描述


简单的流程图 :

在这里插入图片描述


总结 :

  1. Vue中的数据代理 :

    a.通过 vm 对象来代理 data 对象中属性的操作 (读 / 写)

  2. Vue 中 数据代理的好处 :

    a. 更方便的操作 data 中 的数据

  3. 基本原理 :

    a. 通过Object。defineProperty() 把 data 对象中所有属性添加到 vm 伤

    b.为每一个添加到 vm 上的属性 ,都指定一个 getter / setter

    c. 在 getter / setter 内部 去操作 (读 / 写) data 中对应的属性


补充 : 展开_data

在这里插入图片描述

2. 事件处理

2.1 v-on:click 点击事件

在这里插入图片描述


另外 : 这里我们的 showInfo 是可以 接收参数的 ,

在这里插入图片描述


注意 : 这里 showInfo 里面写成了箭头函数 , 此时 this 就代表 window ,而不是 vm (vue 实例对象了)

在这里插入图片描述


ES6 语法 中的箭头函数


v-on:click 简写 :@clike

在这里插入图片描述


补充 : 这里指定的 回调函数 可以传递参数 , 不止是 event ,

在这里插入图片描述


总结: 事件的基本使用 :

  1. 使用 v-on:xxx 或 @xxx 绑定事件 , 其中 xxx 是事件名
  2. 事件的回调需要配置在 methods 对象中 ,最终会在 vm 上
  3. methods 中配置的函数 , 不要使用 箭头函数 ! 否则 this 就是是 vm了
  4. methods 中 配置的函数 , 都是 被 Vue 所管理的 函数 , this 的指向是 vm 或 组件实例对象
  5. @click = “demo” 和 @click = “demo($event)” 效果一致 , 但后者可以传参 .

2.2 事件修饰符


1. prevent : 阻止默认事件

在这里插入图片描述


2. stop : 阻止事件冒泡

在这里插入图片描述


3. once: 事件只触发一次

在这里插入图片描述


4. capture :使用事件的捕获模式

在这里插入图片描述


5. self : 只有 event.target 是 当前操作的 元素时才触发

在这里插入图片描述


6. passive :事件的默认行为立即执行,无序等待事件的回调执行完毕

在这里插入图片描述


注意 : 这里 主要掌握前 三个即可 ,后面这三个用的少


最后补充一下小技巧 : 我们的事件修饰符 是可以连着写的

比如 :

@click.stop.prevent  此时就相当于 先阻止冒泡 ,在阻止默认事件 

2.3 键盘事件


关于键盘事件 常用的有两个 :

  1. 键盘按下事件:keydown() 是在键盘按下就会触发

  2. 键盘弹起事件:keyup() 是在键盘松手就会触发


简单说一下 Keyup与Keydown区别为:触发不同、焦点不同、用途不同。


一、触发不同

1、Keyup:Keyup的事件在键盘按键按下时立即触发。

2、Keydown:Keydown的事件在键盘按键放开时立即触发。


二、焦点不同

1、Keyup:Keyup事件触发的时候需要保证控件拥有焦点。

2、Keydown:Keydown事件触发的时候不需要保证控件拥有焦点。


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述

3. 计算属性


通过一个代码案例 ,来显示出为啥需要计算属性 :


需要实现的效果 :

在这里插入图片描述

3.1 插值语法实现

<!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>姓名案例_插值语法实现</title>
    <!-- 引入 vue -->
    <script src="../../js/vue.js"></script>
</head>

<body>
    <div id="root">
        姓 : <input type="text" v-model="firstName"><br /><br />
        名 : <input type="text" v-model="lastName"><br /><br />
        全名 : <span>{{firstName}} - {{lastName}}</span>
        
        <!-- {{firstName.slice(0,3)}}  slice(0,3) 只会读取前三位 -->
    </div>

    <script>
        new Vue({
            el: "#root",
            data: {
                firstName: '张',
                lastName: '三'
            }
        })
    </script>
</body>

</html>

3.2 methods实现

在这里插入图片描述

3.3 计算属性实现


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


总结:

计算属性 :

  1. 定义 : 要用的属性不存在 , 要通过已有属性计算得出

  2. 原理 : 底层借助了 object.defineproperty方法提供 getter 和 setter

  3. get 函数什么时候执行 ?

    a. 初次读取时会执行一次

    b. 当依赖的数据发生改变时会被再次调用

  4. 优势 : 与 methods 实现相比 , 内部有缓存机制(复用) , 效果更高 ,调试方便.

  5. 备注 :

    a. 计算属性最终会出现在 vm 上 , 直接读取使用即可 。

    b. 如果计算属性要被修改,那必须写 set 函数去响应修改. 且 set 中 要引起计算时依赖的数据发生改变


计算属性 简写形式


计算属性 , 计算出的属性更多情况下是不会修改的 , 此时 set 就可以 写 (只考虑 读 不考虑 改)

<!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>姓名案例_methods实现</title>
    <!-- 引入 vue -->
    <script src="../../js/vue.js"></script>
</head>

<body>
    <div id="root">
        姓 : <input type="text" v-model="firstName"><br /><br />
        名 : <input type="text" v-model="lastName"><br /><br />

        全名 : <span>{{fullName}}</span><br /><br />

    </div>

    <script>
        let vm = new Vue({
            el: "#root",
            data: {
                firstName: '张',
                lastName: '三'
            },
            computed: {
                // 简写 : 
                // 这个函数就当作 get 使用  
                fullName: function () {
                    return this.firstName + " - " + this.lastName
                }
            }

        })
    </script>
</body>

</html>


此时 这个 fullName : function() {} 还可以简写一下

   computed: {
                // 简写 : 
                // 这个函数就当作 get 使用  
                fullName() {
                    return this.firstName + " - " + this.lastName
                }
            }

4. 监视属性

通过 一个代码案例 引出 监视属性 :


需要实现效果 :

在这里插入图片描述


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


图三 : 第二种方式 配置 监视

在这里插入图片描述


总结 :

监视属性 watch :

  1. 当被监视的属性变化是 , 回调函数自动调用 ,进行相关操作

  2. 监视的属性必须存在 , 才能进行监视

  3. 监视的两种写法

    a. new Vue 时 传入 watch 配置

    b. 通过 vm.$watch 监视

总结完 ,下面来看看监视的扩展点 , 深度监视

4.1 深度监视

在这里插入图片描述


总结 :

深度监视 :

  1. Vue 中 的watch 默认不监测对象内部值的改变 (一层)
  2. 配置 deep: true 可以监测对象内部值改变 (多层)

备注 :

  1. Vue 自身可以监测 对象内部值的改变 , 但 Vue 提供的 watch 默认不可以
  2. 使用 watch时根据数据的具体结构 , 决定是否采用深度监视

4.2 监视属性的简写形式


当 我们 不需要 immediate (初始化执行一次) , deep (深度监视), 即 配置项中只有 handler 时 可以简写 。

<!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>天气案例 : </title>
    <script src="../../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <h2>今天天气很: {{info}}</h2>
        <button @click="changeWeather">切换天气</button>
    </div>

    <script>
        new Vue({
            el: "#root",
            data: {
                isHost: true,
            },
            computed: {
                info() {
                    return this.isHost ? '炎热' : '凉爽';
                }
            },
            methods: {
                changeWeather() {
                    this.isHost = !this.isHost;
                }
            },
            watch: {
                isHost(newValue, oldValue) {
                    console.log('isHost 被修改了', newValue, oldValue)
                }
            }
        })
    </script>
</body>

</html>


通过 vm.$watch , 同样也可也i简写

<!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>天气案例 : </title>
    <script src="../../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <h2>今天天气很: {{info}}</h2>
        <button @click="changeWeather">切换天气</button>
    </div>

    <script>
        let vm = new Vue({
            el: "#root",
            data: {
                isHost: true,
            },
            computed: {
                info() {
                    return this.isHost ? '炎热' : '凉爽';
                }
            },
            methods: {
                changeWeather() {
                    this.isHost = !this.isHost;
                }
            },

        })

        vm.$watch("isHost", function (newValue, oldValue) {
            console.log("isHost被修改了", newValue, oldValue);
        })

    </script>
</body>

</html>

4.3 watch 与 computed 对比


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


图三 :

在这里插入图片描述


总结 :


computed 和 watch 之间的区别 :

  1. computed 能完成的功能 , watch 都可以完成.
  2. watch 能完成的功能 , computed 不一定能完成, 列如 : watch 可以进行异步操作.


两个重要的小原则 :

  1. 所被 Vue 管理的函数 , 最好写成普通函数 ,这 this 的指向 才是 vm 或 组件实例对象
  2. 所有不被 Vue 所管理的函数 (定时器的回调函数 , ajax 的 回调函数 等) , 最好写成箭头函数 , 这样 this 的指向才是 vm 或 组件实例对象.

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

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

相关文章

SQL数据查询——单表查询和排序

文章目录一、单表查询1.查询列1&#xff09;查询全部列指定列2&#xff09;查询经过计算的值3&#xff09;列的别名2.查询元组1&#xff09;消除取值重复的行(DISTINCT)2&#xff09;条件查询(WHERE)3.空值参与运算4.着重号二、排序(ORDER BY子句)一、单表查询 单表查询指仅涉及…

Webpack的知识要点

在前端开发中&#xff0c;一般情况下都使用 npm 和 webpack。   npm是一个非常流行的包管理工具&#xff0c;帮助开发者管理项目中使用的依赖库和工具。它可以方便地为项目安装第三方库&#xff0c;并在项目开发过程中进行版本控制。   webpack是一个模块打包工具&#xff…

C语言深度剖析之程序环境和预处理

1.程序的翻译环境和执行环境 第一种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令 第二种是执行环境&#xff0c;它用于实际执行代码 2.翻译环境 分为四个阶段 预编译阶段 &#xff0c;编译&#xff0c;汇编&#xff0c;链接 程序编译过程&#xff1a;多个…

使用vue3,vite,less,flask,python从零开始学习硅谷外卖(16-40集)

严正声明&#xff01; 重要的事情说一遍&#xff0c;本文章仅供分享&#xff0c;文章和代码都是开源的&#xff0c;严禁以此牟利&#xff0c;严禁侵犯尚硅谷原作视频的任何权益&#xff0c;我知道学习编程的人各种各样的心思都有&#xff0c;但这不是你对开源社区侵权的理由&am…

iptables防火墙之SNAT与DNAT

目录 1、SNAT策略概述 1.SNAT策略的典型应用环境 2.SNAT策略的原理 3.SNAT工作原理 4.SNAT转换前提条件 5.开启SNAT命令 6.SNAT转换 2.SNAT示例 1. 配置网关服务器 2.Xshell 连接192.168.100.100 3.DNAT策略及应用 1. DNAT策略概述 2.DNAT 策略的应用 3.DNAT转换前提条件…

看完这篇 教你玩转渗透测试靶机vulnhub——Hack Me Please: 1

Vulnhub靶机Hack Me Please: 1渗透测试详解Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;漏洞利用③&#xff1a;获取反弹shell&#xff1a;④&#x…

how https works?https工作原理

简单一句话&#xff1a; https http TLShttps 工作原理&#xff1a;HTTPS (Hypertext Transfer Protocol Secure)是一种带有安全性的通信协议&#xff0c;用于在互联网上传输信息。它通过使用加密来保护数据的隐私和完整性。下面是 HTTPS 的工作原理&#xff1a;初始化安全会…

Camtasia2023最新版电脑视频录屏记录编辑软件

在Mac或Wind上有各种可用的视频记录和编辑软件&#xff0c;其中Camtasia被称为视频记录器和视频编辑器。录屏软件Camtasia2023到底有什么特色功能&#xff1f;本文将帮助您选择理想的选择来开始视频捕获&#xff0c;创建和编辑。Camtasia2023是Mac/win平台上一款使用非常简单的…

【JavaScript】题(牛客网)——熟练使用函数调用,超详细讲解

1 熟练使用函数调用 1.1 题目 执行以下程序&#xff0c;输出结果为 var uname "window"; var object {uname: "object",fun: function () {console.log(this.uname);return function () {console.log(this.uname);};}, };object.fun()();1.2 答案 ob…

ThingsBoard-设备配置

1、概述 从 ThingsBoard 3.2 开始,租户管理员可以使用设备配置文件为多个设备配置通用设置。每个设备在单个时间点都有一个且唯一的配置文件。 有经验的 ThingsBoard 用户会注意到设备类型已被弃用,取而代之的是设备配置文件。更新脚本将根据唯一的设备类型自动创建设备配置…

三、Java面向对象

1 . 方法 方法(method)是程序中最小的执行单元方法就是一些代码的打包 需要的时候可以直接调用方法之间是平级的关系 不能在方法里面定义方法方法不调用就不执行 方法的定义 // 方法的定义 /* [修饰符] 返回值类型 方法名称([参数 1],[参数 2]){语句A;return 返回值; } *///…

VT虚拟化框架编写

文章目录前言VT架构基础VT框架编写步骤一&#xff1a;检测VT是否开启VMM和VMVMON和VMCSVT框架编写步骤二 填充VMONVT框架编写步骤三 进入VTVT框架编写步骤四 初始化VMCSVT框架编写步骤五 初始化VMCS数据区VT框架编写步骤六 处理必要事件前言 学习VT相关的知识&#xff0c;需要…

C++11新特性

文章目录说在前面花括号{}初始化new的列表初始化STL相关容器的列表初始化相关语法格式容器列表初始化的底层原理forward_list和array与类型相关的新特性decltype左值引用和右值引用什么是左值&#xff0c;什么是右值左值和右值的本质区别右值引用如何理解右值引用std::move移动…

【软考系统架构设计师】2022下综合知识历年真题

【软考系统架构设计师】2022下综合知识历年真题 【2022下架构真题第01题&#xff1a;绿色】 01.云计算服务体系结构如下图所示&#xff0c;图中①、②、③分别与SaaS、PaaS、Iaas相对应&#xff0c;图中①、②、③应为( ) A.应用层、基础设施层、平台层 B.应用层、平台层、基础…

Linux驱动开发(一)

linux驱动学习记录 一、背景 在开始学习我的linux驱动之旅之前&#xff0c;先提一下题外话&#xff0c;我是一个c语言应用层开发工作人员&#xff0c;在工作当中往往会和硬件直接进行数据的交互&#xff0c;往往遇到数据不通的情况&#xff0c;常常难以定位&#xff0c;而恰巧…

静态分析工具Cppcheck在Windows上的使用

之前在https://blog.csdn.net/fengbingchun/article/details/8887843 介绍过Cppcheck&#xff0c;那时还是1.x版本&#xff0c;现在已到2.x版本&#xff0c;这里再总结下。 Cppcheck是一个用于C/C代码的静态分析工具&#xff0c;源码地址为https://github.com/danmar/cppcheck …

Python之字符串精讲(上)

前言 字符串是所有编程语言在项目开发过程中涉及最多的一个内容。大部分项目的运行结果&#xff0c;都需要以文本的形式展示给客户&#xff0c;曾经有一位久经沙场的老程序员说过一句话&#xff1a;“开发一个项目&#xff0c;基本上就是在不断的处理字符串”。下面对Python中…

自命为缓存之王的Caffeine(3)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e;缓存的存储空间是远远小于磁盘的。所以对于有些过期的数据&#xff0c;就需要定期进行清理&#xff0c;腾出存储空间。Caffeine又是怎么做的呢&#xff1f;Caffei…

SpringBoot+Vue在线小说系统

简介&#xff1a;本项目采用了基本的springbootvue设计的在线小说系统。详情请看截图。经测试&#xff0c;本项目正常运行。本项目适用于Java毕业设计、课程设计学习参考等用途。 特别说明&#xff1a;本系统设计网络爬虫&#xff0c;遵循爬虫规则&#xff0c;此项目用于学习&a…

2023关键词:挑战

未失踪人口回归… 好久不见&#xff0c;不经意间拖更2个多月。今天周末&#xff0c;外面淅淅沥沥下着小雨&#xff0c;这种窝在床上的时刻最适合写点东西了。 但是建议大家在办公或者写博客的时候尽量还是端正坐姿&#xff0c;我就是因为喜欢这样靠在床背上&#xff0c;长时间…