vue(5)

news2024/12/23 23:53:14

文章目录

  • 1. 监测数据原理
    • 1.1 通过问题引出
    • 1.2 开始
    • 1.3 Vue.set() 方法
    • 1.4 vue 监视 数组
    • 1.5 小练习
  • 2. 收集表数据
  • 3. 过滤器
  • 4. 内置指令
    • 4.1 v-text
    • 4.2 v-html
    • 4.3 v-cloak
    • 4.4 v-once
    • 4.5 v-pre

1. 监测数据原理

1.1 通过问题引出


在这里插入图片描述

1.2 开始


要想解决上面的这个问题 ,需要知道 Vue 是如何监测数组里元素的改变 , 但是 为了 更好的理解 ,这里先来说说 vue 是如何监测 对象里数据改变的 。


回顾 : 数据代理 Vue (3) , 之前说过 数据代理 , 是让 vm._data = data , 其实 这是第二步 , 第一步是 对 data 进行加工 ,


vue 监视原理 :

在这里插入图片描述


简单来说 , 监视数据的原理就是 靠 set ,当我们修改 data中 的属性 是 (比如 上面的 name , address) , vue 就会重新解析模板 ,

生成新的 虚拟 DOM , 然后 新旧 虚拟 DOM 对比 , 更新 页面 .

知道了 set , 下面 就来看看 set 这个 API

1.3 Vue.set() 方法

在这里插入图片描述


图二 : 上面是在控制台上写 ,下面写一个按钮 ,点击 添加 学校年龄

在这里插入图片描述


图三 : set 的局限性

在这里插入图片描述

1.4 vue 监视 数组

在这里插入图片描述


vue 文档 : 列表渲染 — Vue.js (vuejs.org)


图二 :

在这里插入图片描述


可以看到想要 vue 监视到数组的变化 , 需要通过 上面列举的方法 , 其实 还可以通过 之前说过的 set 来改 .

在这里插入图片描述


同理 $set 一样 , 这里不展示了 .

1.5 小练习


将之前说过的 API 使用以下 :

<!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>
    <script src="../../js/vue.js"></script>

</head>

<body>
    <div id="root">
        <button @click="student.age++">年龄+1岁</button><br /><br />
        <button @click="addSex()">添加性别属性, 默认值: 男</button><br /><br />
        <button @click="removeSex()">隐藏 性别</button>
        <button @click="updateSex()">修改性别</button><br /><br />

        <button @click="addFriend()">在列表首页添加一名朋友</button><br /><br />

        <button @click="updateFirstFriendName">修改第一个朋友的名字为: 鲲鹏</button><br /><br />

        <button @click="addHobby">添加一个爱好</button><br /><br />

        <button @click="updateHobby">修改第一个爱好为: 打羽毛球</button>

        <h3>姓名: {{student.name}}</h3>
        <h3>年龄: {{student.age}}</h3>
        <h3 v-if="student.sex">性别: {{student.sex}}</h3>
        <h2>爱好: </h2>
        <ul>
            <li v-for="(h,index) in student.hobby" :key="index">
                {{h}}
            </li>
        </ul>

        <h2>朋友: </h2>
        <ul>
            <li v-for="(f,index) in student.friends" :key="index">
                {{f.name}}-{{f.age}}
            </li>
        </ul>
    </div>

    <script>

        // let flag = false;
        let vm = new Vue({

            el: "#root",
            data: {
                student: {
                    name: "张三",
                    age: 18,
                    // 爱好
                    hobby: [
                        // 数组 
                        "抽烟",
                        "喝酒",
                        "烫头",
                    ],
                    flag: false,
                    friends: [
                        {
                            name: '张三', age: 35

                        },
                        {
                            name: "李四", age: 60
                        }
                    ]
                },

            },
            methods: {
                addSex() {

                    // this.$set(this.student,'sex','男')
                    Vue.set(this.student, 'sex', '男')
                    this.flag = true
                },
                updateSex() {
                    if (this.flag) {
                        if (this.student.sex === '男') {
                            this.student.sex = '女'
                        } else {
                            this.student.sex = '男'
                        }
                    }
                },
                removeSex() {
                    if (this.student.sex) {
                        this.flag = false
                        this.student.sex = null
                    }
                },
                addFriend() {
                    this.student.friends.unshift({ name: "坤哥", age: 80 })
                },
                updateFirstFriendName() {

                    this.student.friends[0].name = '鲲鹏'

                },
                addHobby() {
                    this.student.hobby.push('学习')
                },
                updateHobby(){
                    this.student.hobby.splice(0,1,'打羽毛球')

                    // 方法二 :
                    // Vue.set(this.student.hobby,0,'打羽毛球')

                    // 方法三 :
                    // this.$set(this.student.hobby,0,'打羽毛球')
                }


            }

        })
    </script>
</body>

</html>


总结 :

Vue 监视数据的原理 :

  1. vue 会监视 data 中所有 层次的数据 .

  2. 如何监测对象中的数据 ?

    a.通过 setter 实现监视 , 且要在 new Vue 时就传入要监测的数据 (data 中 写的)

    • 对象中后追加的属性 , Vue 默认不做响应式处理
    • 如需要给后添加的属性做响应式 , 请使用 这如下 API
    • Vue.set(target,propertyName/index,value) vm.$set(target,propertyName/index,value)
  3. 如何监测数组中的数据 ?

    a. 通过包裹数组更新元素的方式实现 , 本质就是做了两件事 :

    • 通过调用原生对应的方法对数组进行更新.
    • 重新解析模板,进而更新页面
  4. 在Vue 修改数组中的某个元素一定要用如下方法 :

    a. 使用 这些 API : push() , pop() , shift() , unshift(), splice() , sort() , reverse() ,

    b. Vue.set() 或 vm.$set()

特别注意 : Vue.set() 和 vm.$set() 不能给 vm 或 vm 的根数据对象 (data) 添加属性


最后 说以下 数据劫持 :

在这里插入图片描述

2. 收集表数据


要求 :

在这里插入图片描述


实现 :

在这里插入图片描述


图二 :

在这里插入图片描述

图三 :

在这里插入图片描述


图四 :

在这里插入图片描述


图五 : 补充

在这里插入图片描述


附上代码 :

<!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">
        <form @submit.prevent="demo">
           
            <!-- form 表单提交数据 -->
            <label for="demo"> 账号 :</label>
            <input type="text" id="demo" v-model.trim="account"><br /><br />


            <label for="demo2"> 密码 :</label>
            <input type="text" id="demo2" v-model="password"><br /><br />

            <label for="demo3">年龄 : </label>
            <input type="number" id="demo3" v-model.number="age"><br /><br /><input type="radio" name="sex" v-model='sex' value="male"><input type="radio" name="sex" v-model='sex' value="female"><br /><br />

            爱好 :
            学习 <input type="checkbox" v-model='hobby' value="study">
            打游戏<input type="checkbox" v-model='hobby' value="game">
            吃饭<input type="checkbox" v-model='hobby' value="eat"> <br /><br />


            <select v-model="city">
                <option value="">请选择小区</option>
                <option value="beijing">北京</option>
                <option value="shanghai">上海</option>
                <option value="shenzhen">深圳</option>
                <option value="wuhan">武汉</option>
            </select>
            <br /><br />

            其他信息 :

            <textarea v-model.lazy="other"></textarea>




            <br /> <br />
            <input type="checkbox" v-model="agree">阅读并接收<a href="#">《用户协议》</a>

            <button>提交</button>

        </form>


    </div>
</body>

<script>
    let vm = new Vue({
        el: "#root",
        data: {
            account: '',
            password: '',
            sex: 'female',
            hobby: [],
            city: 'beijing',
            other: '',
            agree: '',
            age: '',
        },
        methods: {
            demo() {
                console.log(JSON.stringify(this._data))
            }
        }
    })
</script>

</html>


总结 :

收集表单数据 :

  1. <input type="text" /> , 则 v-model 收集的是 value 值 , 用户输入的就是 value值 .

  2. <input type="radio" /> , 则 v-model 收集的就是 value 值 , 且要给标签配置 value 值

  3. <input type="checkbox" />

    a. 没有 配置 inpput 的value 属性, 那么收集的就是 checked (勾选 or 未勾选 , 是布尔值)

    b. 配置 inputd value 属性 :

    • v-model 的初始值是非数组,那么收集的就是 checked (勾选 or 未 勾选 , 是布尔值)
    • v-model 的初始值 是 数组,那么收集的就是 value 组成的数组
  4. 备注 : v-model的三个修饰符

    a. lazy : 失去焦点再收集数据

    b. number : 数组字符串转为有效的数字

    c. trim : 输入首位空格过滤

3. 过滤器

在这里插入图片描述


注意 : 过滤器 并不是必要的 , 而是 vue 提供 一个新的 数据处理的方式 , 不想用 ,正常使用 计算属性 , methods也能完成.


下面这里通过第三方库来操作我们的时间 BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务

在这里插入图片描述


下面先通过计算属性 来完成 要求 :


计算属性实现 :

在这里插入图片描述


methods 实现

在这里插入图片描述


过滤器实现

在这里插入图片描述


上面写的过滤器 都是 局部的过滤器 ,只能 由 创建 过滤的 vue 实例使用 , 如果在出现一个vue 实例 就无法 使用了 .


下面来学习 创建全局的过滤器 :

在这里插入图片描述


总结 :

过滤器 :

定义 : 对要显示的数据进行特定格式化再显示(适用一些简单逻辑的处理) .

语法 :

  1. 注册过滤器 : Vue.filter(name,callback) 或 new Vue {filters:{}}
  2. 使用过滤器 :{{ xxx | 过滤器名}} 或 v-bind : 属性 = “xxx | 过滤器名”

备注 :

  1. 过滤器也可接收额外参数 , 多个过滤器 也可以串联
  2. 并没有改变原本的庶几乎,是产生新的对应的数据

4. 内置指令


之前学过 v-on , v-bind , v-if , v-for , 这里 就来 学习一下 vue 提供的其他 指令 .


回顾一下之前学过的 :

在这里插入图片描述

4.1 v-text

从 v-text 名字 就可以知道 , 这个指令是 将一个文本渲染到页面上 , 下面演示一下下 :

在这里插入图片描述


图二 :

在这里插入图片描述

4.2 v-html


v-html : 向指定节点中渲染 含 html 结构的内容 .

在这里插入图片描述

4.3 v-cloak

在这里插入图片描述

4.4 v-once

在这里插入图片描述

4.5 v-pre


在这里插入图片描述

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

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

相关文章

python基于django幼儿园管理系统

目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2.1 JAVA简介 4 2.2MyEclipse环境配置 4 2.3 B/S结构简介 4 2.4MySQL数据库 5 2.5 SPRINGBOOT框架 5 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3…

【2022.12.9】Lammps+Python 在计算g6(r)时遇到的问题

目录写在前面绘制g6( r )执行步骤【updated】如何检查图像的正确性&#xff1a;不是编程问题&#xff0c;而是数学问题的一个小bug废稿2则&#xff1a;写在前面 全部log&#xff1a; 【2022.11.16】LammpsPythonMATLAB在绘制维诺图时遇到的问题 绘制g6( r )执行步骤【updated…

Eureka原理浅析

文章目录1.简介2.组件2.1 Eureka Server2.1.1 主要功能2.1.2 自我保护机制2.1.3 数据同步方式2.1.4 Server的多级缓存和Client实例过期策略2.2 Eureka Client3.补充3.1 CAP偏重点3.2 功能扩展性3.3 工作流程1.简介 Eureka是Netflix开发的服务发现框架&#xff0c;本身是基于RE…

SegNeXt: 重新思考基于卷积注意力的语义分割

论文信息 论文名称&#xff1a;SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation 项目GitHub&#xff1a; GitHub - Visual-Attention-Network/SegNeXt: Official Pytorch implementations for "SegNeXt: Rethinking Convolutional Atten…

ESP-C3入门11. 创建最基本的HTTP请求

ESP-C3入门11. 创建最基本的HTTP请求一、menuconfig配置二、配置 CMakeLists1. 设置项目的额外组件目录2. 设置头文件搜索目录三、在 ESP32 上执行 HTTP 请求的基本步骤1. 创建 TCP 连接2. 设置 HTTP 请求3. 发送 HTTP 请求4. 接收 HTTP 响应5. 处理 HTTP 响应6. 关闭 TCP 连接…

35岁以上的大龄测试员们,后来都干什么去了?

为什么软件测试行业看不见白发苍苍的软件测试员?大龄测试员都去哪里了?各个公司会辞退大龄测试员吗? 如果一位 50 多岁的测试员申请 20 多岁或 30 多岁的职位&#xff0c;有多少公司会雇用他们呢?关于这个问题&#xff0c;有很多流言传说&#xff0c;也有一些残酷的现实。…

努力优化和改造不好的环境,去设计新的、积极的、适合自己的环境

你知道环境对你的影响有多大吗&#xff1f;自己的的社交圈也是一个环境如果你待在一个只知道吃喝玩乐&#xff0c;不思进取&#xff0c;天天玩手机、打游戏的圈子里那你很大程度也会被影响&#xff0c;因为你不跟他们一起你就融入不进去&#xff0c;就会被孤立&#xff0c;很多…

优秀蓝牙耳机推荐,热销不错的四款蓝牙耳机推荐

蓝牙耳机作为目前最流行的数码产品&#xff0c;受到很多人追捧&#xff0c;蓝牙耳机摆脱了有线蓝牙耳机的束缚&#xff0c;能够更好听歌打游戏&#xff0c;随时取用&#xff0c;更为便利&#xff0c;当然&#xff0c;随着耳机的大幅度创新&#xff0c;也导致很多人在选购耳机的…

内网渗透(四十三)之横向移动篇-SMB远程执行命令横向移动

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

前端性能优化的一些技巧(90% chatGpt生成)

终于弄好了chatGpt的账号&#xff0c;赶紧来体验一波。先来一波结论&#xff0c;这篇文章的主要内容来源&#xff0c;90%是用chatGpt生成的。先上chatGpt的生成的结果&#xff1a;作为一名懒惰的程序员&#xff0c;chatGpt会帮助我变得更懒...&#xff0c;好了下面开始文章的正…

GEE学习笔记 六十八:【GEE之Python版教程二】配置Python开发环境

这一篇内容主要讲解两部分内容&#xff0c;第一部分是本地python开发环境的配置&#xff0c;第二部分是GEE的python开发环境配置。我这里做的所有的操作都是在我的Mac电脑上做的&#xff0c;Windows上操作类似&#xff0c;如果有不清楚的可以自行搜索相关操作步骤。 第一部分&…

pytorch零基础实现语义分割项目(四)——模型训练与预测

模型训练与预测项目列表前言损失函数one_hotDice LossFocal Loss模型参数与训练预测项目列表 语义分割项目&#xff08;一&#xff09;——数据概况及预处理 语义分割项目&#xff08;二&#xff09;——标签转换与数据加载 语义分割项目&#xff08;三&#xff09;——语义…

winserver服务器硬盘满了怎么清理? 服务器硬盘空间不足清理方法

本文主要介绍我在维护windows server服务器期间总结的一些磁盘清理方式。如对您有所帮助&#xff0c;不甚荣幸。 文章目录一、C盘清理1. System32的日志文件2. IIS的日志文件3. .Net Framework的缓存文件4. 清理其他不必要文件5. 虚拟内存从c盘移到其他硬盘二、其他软件清理1. …

【离散数学】4. 图论

1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 图&#xff1a;点边边与点的映射函数 连通性与判别 欧拉图与哈密尔顿图 二分图和平面图与欧拉公式 树及生成树 单源点最短路径&#xff1a;Dijkstra算法 对偶图 4. 图论 4.1 图的基本概念 4.1.1 图 一个图G是一个三重组 <V(G),E…

【LeetCode】No.232. 用栈实现队列 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/implement-queue-using-stacks/ 1. 题目介绍&#xff08;232. 用栈实现队列&#xff09; 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff…

两年外包生涯做完,感觉自己废了一半....

先说一下自己的情况。大专生&#xff0c;17年通过校招进入湖南某软件公司&#xff0c;干了接近2年的点点点&#xff0c;今年年上旬&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经在一个企业干了五年的功能测试…

慕了没?3年经验,3轮技术面+1轮HR面,拿下字节30k*16薪offer

前段时间有个朋友出去面试&#xff0c;这次他面试目标比较清晰&#xff0c;面的都是业务量大、业务比较核心的部门。前前后后去了不少公司&#xff0c;几家大厂里&#xff0c;他说给他印象最深的是字节3轮技术面1轮HR面&#xff0c;他最终拿到了30k*16薪的offer。第一轮主要考察…

MyBatis-Plus详细讲解(整合spring Boot)

哈喽&#xff0c;大家好&#xff0c;今天带大家了解的是MyBatis-Plus&#xff08;简称 MP&#xff09;&#xff0c;是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。首先说一下MyBatis-Plus的愿景是什么&…

十五.程序环境和预处理

文章目录一.程序翻译环境和执行环境1.ANSI C 标准2.程序的翻译环境和执行环境二.程序编译和链接1.翻译环境2.编译本身的几个阶段3.运行环境三.预处理1.预定义符号2.#define&#xff08;1&#xff09;#define定义标识符&#xff08;2&#xff09;#define定义宏&#xff08;3&…

【Linux】——基础开发工具和vim编辑器的基本使用方法

目录 Linux 软件包管理器 yum Linux编辑器-vim使用 1.vim的基本概念 2. vim的基本操作 3. vim正常模式命令集 4. vim末行模式命令集 如何配置vim Linux 软件包管理器 yum yum是Linux下的一个下载软件的软件 对于yum&#xff0c;现阶段只需要会使用yum的三板斧就…