vue2 part2

news2024/9/22 17:37:19

数据代理

通过defineProperty里面传入obj2和x,然后get和set下读取接收下然后再接收set中给对象x用value接收下,这样就能两个数据读取和接收了

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>何为数据代理</title>
</head>

<body>
    <!--数据代理:通过一个对象代理对另一个对象中属性的操作(读/写)-->
    <script type="text/javascript">
        let obj = { x: 100 }
        let obj2 = { y: 200 }
        Object.defineProperty(obj2, 'x', {
            get() {
                return obj.x
            },
            set(value) {
                obj.x = value
            }
        })
    </script>
</body>

</html>

类似指针

控制台输出vm,你的name和address是get和set代理的

 new的vue是一个全局对象,无法在控制台变化,error:data.name失败

vm的data实际存在_data中,但是要额外定义data,导入到new vue中,控制台判断是否===,true

_data相当于另一个新对象,然后里面的值和原始的data数据一样。

控制台vm._data.name='atguigu'
vm.name原来是尚硅谷
vm.name显示"atguigu"

控制台的_data是address,name等是数据劫持

事件处理

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    tle>事件的基本使用</title>
    <!--引入Vue -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
    <!--
事件的基本使用:
1.使用v-on:xxx或@xxx绑定事件,其中xxx是事件名;
2.事件的回调需要配置在methods对象中,最终会在vm上;
3.methods中配置的函数,不要用箭头函数!否则this就不是vm了;
4.methods中配置的函数,都是被Vue所管理的函数,this的指向是vm 或组件实例对象
5.@click="demo”和 @click="demo($event)”效果一致,但后者可以传参;
-->
    <!--准备好一个容器-->
    <div id="root">
        <h2>欢迎来到{{name}}学习</h2>
        <!-- <button v-on:click="showInfo">点我提示信息</button> -->
        <button@click="showInfo1">点我提示信息1(不传参)</button>
            <button@click="showInfo2($event,66)">点我提示信息2(传参)</button><!--传参加小括号,同时showInfo失去了event -->
    </div>
</body>
<script type="text/javascript">
    Vue.config.productionTip = false//阻止vue在启动时生成生产提示。


    const vm = new Vue({
        el: '#root',
        data: {
            name: '尚硅谷',
            showInfo2(event, number) {
                console.log(event, number)
                // console.log(event.target.innerText)
                // console.log(this)//此处的this是vm
                alert('同学你好!!')
            }
        },
        methods: {
            showInfo1(event) {
                // console.log(event.target.innerText)
                // console.log(this)//此处的this是vm
                alert('欢迎来到尚硅谷学习!')
            },
            showInfo2(event, number) {
                console.log(event, number)
                // console.log(event.target.innerText)              
                // console.log(this)//此处的this是vm
                alert('同学你好!!')
            }
        }
    })
</script>
</htm1>

太多东西,自己看p14吧

事件修饰符

所以执行顺序是:触发行为->回调->默认行为?

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    tle>事件的基本使用</title>
    <!--引入Vue -->
    <script type="text/javascript" src="../js/vue.js"></script>
    <style>
        * {
            margin-top: 20px;
        }

        .demo1 {
            color: red;
            height: 50px;
        }

        .box1 {
            padding: 50px;
            background-color: skyblue;

        }

        .box2 {
            padding: 20px;
            background-color: pink;
        }
    </style>

</head>

<body>
    <!-- 
    vue的事件修饰符
    1. .prevent 阻止默认事件    
    2. .stop 阻止事件冒泡
    3. .once 只触发一次 
    4. .capture 使用事件的捕获模式
    5. .self 只有event.target是当前操作元素自身时触发事件 
    6. .passive 事件的默认行为立即执行,不会等待事件回调函数执行完毕。
    -->

    <!--准备好一个容器-->
    <div id="root">
        <!-- 阻止默认事件 -->
        <h2>欢迎来到{{name}}学习</h2>
        <a href="https://www.atguigu.com" @click="showInfo">点我提示信息</a>
        <!-- 阻止事件冒泡 -->
        <div class="demo1" @click.stop="showInfo">
            <button @click.stop="showInfo">点我</button>
            <!-- 事件冒泡:即多个组件嵌套,触发内层组件时,会一一触发外层事件 -->
        </div>
        <!-- 事件只触发一次 -->
        <button @click.once="showInfo">点我</button>
        <!-- 使用事件的捕获模式: 捕获是由外往内,冒泡相反-->
        <div class="box1" @click.capture="showMsg(1)">
            div1
            <div class="box2" @click.capture="showMsg(2)">
                div2
            </div>
        </div>

    </div>
</body>
<script type="text/javascript">
    Vue.config.productionTip = false//阻止vue在启动时生成生产提示。

    new Vue({
        el: '#root',
        data: {
            name: '尚硅谷'

        },
        methods: {
            showInfo(e) {//这里写showInfo(e) e.preventDefault()阻止默认事件,可以防止页面跳转
                alert('同学你好')
                comsole.log(e.target)
            },

            showMsg(num) {
                console.log('div' + num + '被点击了')
            }
        }
    })
</script>
</htm1>

键盘事件

016_尚硅谷Vue技术_键盘事件_哔哩哔哩_bilibili

总结

修饰符可以连续写,正常逻辑,先写的先运行

@keyup.ctrl.y就可以ctrl+y

姓名案例-差值语法实现

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>姓名案例_插值语法实现</title>
    <!-- 引入Vue -->
    <script type="text/javascript" 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.slice(0,3)}} - {{lastName}}</span><!-- firstname只要3位 -->
        全名:<span>{{fullName()}}</span>
    </div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false//阻止vue在启动时生成生产提示。
    new Vue({
        el: '#root',
        data: {
            firstName: '张',
            lastName: '三'
        },

        methods: {
            fullName() {
                return this.firstName.slice(0, 3) + '-' + this.lastName //这里的this是vue实例,所以可以直接调用data里面的属性和方法。

            }//数据发生变化,模板重新解析
        },
    })
</script>

</html>

计算属性

计算属性定义:拿着已经写好的属性,用这些属性计算出来一个属性,称为计算属性,data里面放的是属性  ,而计算属性需要放到一个单独的集合体中

019_尚硅谷Vue技术_计算属性_哔哩哔哩_bilibili很好的视频,清清楚楚明明白白

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>姓名案例_插值语法实现</title>
    <!-- 引入Vue -->
    <script type="text/javascript" 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.slice(0,3)}} - {{lastName}}</span><!-- firstname只要3位 -->
        全名:<span>???</span>
    </div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false//阻止vue在启动时生成生产提示。
    new Vue({
        el: '#root',
        data: {
            firstName: '张',
            lastName: '三'
            x: 'hello'
        },
        //相当于computed中的每个对象默认提供getter和setter,我们只是重写了getter
        computed: {
            fullName: {
                //get有什么作用?当有人读取fullname,get就会被调用,返回值是fullname的值
                //get什么时候被调用?1.当fullname的值被读取时,get就会被调用2.依赖的数据发生变化时,get也会被调用
                get() {//get的this指向vm
                    console.log('get调用了')
                    return this.firstname + '-' + this.lastName
                },//在控制台查找vm._data的firstname,lastname都能找到,但是fullname是underfined,compute已经给了vm
                set(value) {
                    console.log('set', value)
                    const arr = value.split('-')
                    this.firstName = arr[0]
                    this.lastName = arr[1]
                }
            }

        },
    })
</script>

</html>

计算属性:
1.定义:要用的属性不存在,要通过已有属性计算得来。
2.原理:底层借助了Objcet.defineproperty方法提供的getter和setter。
3.get函数什么时候执行?
(1).初次读取时会执行一次。
(2).当依赖的数据发生改变时会被再次调用。
4.优势:与methods实现相比,内部有缓存机制(复用),效率更高,调试方便。
5.备注:
1.计算属性最终会出现在vm上,直接读取使用即可。
2.如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生

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

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

相关文章

printk 操作等级:修改系统日志等级

这是系统日志的等级&#xff0c;在kern_levels.h文件里面 这是printk 函数前面部分先消息等级&#xff0c;中间部分就是&#xff0c;应用层调的printf的格式化字&#xff0c;后面部分就是可变参数 所以信息的等级大于终端的等级才会被打印&#xff0c;命令&#xff0c;cat /pro…

远程连接vscode无法转到定义

遇到用vscode打开远程服务器运行代码的过程中&#xff0c;无法利用插件跳转到定义&#xff08;ctrl鼠标左键///或者F12&#xff09; 问题可能出在两个地方&#xff0c;一个是插件&#xff0c;找到python插件 点击扩展设置&#xff0c;找到language server设置 这里选中pylance…

springboot调用sap接口传输数据,RFC协议接口调用,包含linux,windows部署

背景&#xff1a;我这边需要将一串数组写入到sap系统中&#xff0c;原本希望sap能提供rest形式接口&#xff0c;可惜sap开发那边说sap对外都是rfc接口&#xff0c;现在记录一下sap接口对接&#xff0c;给其他小伙伴提供点经验。 1、首先必须有对应的原料&#xff0c;驱动jar包…

Web应用服务器Tomcat

一、tomcat Tomcat是Java语言开发的&#xff0c;Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。Tomcat属于轻量级应用服务器&#xff0c;在中小型系统和并发…

【微信小程序】自定义组件 - 数据监听器

1. 什么是数据监听器 2. 数据监听器的基本用法 组件的 UI 结构如下&#xff1a; 组件的 .js 文件代码如下&#xff1a; 3. 监听对象属性的变化 数据监听器 - 案例 案例效果 2. 渲染 UI 结构 3. 定义 button 的事件处理函数 4. 监听对象中指定属性的变化 5. 监听对象中所…

Vite + Vue 3 项目中实现路由自动化完整步骤。

下面是从创建项目到实现路由自动化的完整步骤 在 Vite Vue 3 项目中实现路由自动化可以通过使用文件系统路由生成器来简化路由管理过程。以下是实现路由自动化的完整步骤&#xff1a; 1.创建 Vite Vue 3 项目 如果你还没有一个 Vite Vue 3 项目&#xff0c;可以使用以下命令…

Oracle开始严查Java许可!

0x01、 前段时间在论坛里就看到一个新闻&#xff0c;说“Oracle又再次对Java下手&#xff0c;开始严查Java许可&#xff0c;有企业连夜删除JDK”&#xff0c;当时就曾在网上引起了一阵关注和讨论。 这不最近在科技圈又看到有媒体报道&#xff0c;Oracle再次严查&#xff0c;对…

【鸿蒙学习】HarmonyOS应用开发者高级认证 - 应用开发安全(含闯关习题)

学完时间&#xff1a;2024年8月23日 学完排名&#xff1a;第1748名 一、安全设计理念 以硬件TCB作为安全信任基础,软硬结合的安全设计 HarmonyOS系统安全设计基础: 基于最小的可信计算基础TCB;硬件主密钥,加解密引擎关键安全组件基于TEE可信运行环境;TEE&#xff08;Truste…

自编码器(Autoencoder, AE):深入理解与应用

自编码器&#xff08;Autoencoder, AE&#xff09;&#xff1a;深入理解与应用 引言 自编码器&#xff08;Autoencoder, AE&#xff09;是一种通过无监督学习方式来学习数据有效表示的神经网络模型。其核心思想是通过编码器将输入数据压缩成低维潜在表示&#xff0c;然后通过…

Element-UI自学实践(二)

因上篇 Element-UI自学实践&#xff08;一&#xff09; 文字过多&#xff0c;不便于观看&#xff0c;故另起一篇。 5. 反馈组件 反馈组件用于与用户进行交互&#xff0c;提供即时反馈&#xff0c;包括警告&#xff08;Alert&#xff09;、消息提示&#xff08;Message&#x…

Datawhale X 李宏毅苹果书 AI夏令营task1-3笔记

1.1 通过案例了解机器学习 机器学习基础 首先简单介绍一下机器学习&#xff08;Machine Learning&#xff0c;ML&#xff09;和深度学习&#xff08;Deep Learning&#xff0c;DL&#xff09;的基本概念。机器学习&#xff0c;顾名思义&#xff0c;机器具备有学习的能力。具体…

[笔记] 某振动分析软件的可能侦测范围

1.可检测量【部分】 后面有图例&#xff0c;很好找&#xff0c;其实。可以在bing.com搜索image. {"type": "sdc-application-types","version": 1,"data": [{"name": "Disabled ","type": "disa…

<数据集>遥感船舶识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;15047张 标注数量(xml文件个数)&#xff1a;15047 标注数量(txt文件个数)&#xff1a;15047 标注类别数&#xff1a;25 标注类别名称&#xff1a;[Aircraft Carrier, Auxiliary Ships, Other Ship, Other Warship,…

实车测试的目的和作用 (Purpose and function of real vehicle test)

实车测试的目的和作用主要在于验证整车控制器软件的功能&#xff0c;确保其在实车环境下的安全性和稳定性。实车测试是整车控制器软件发布前不可或缺的一个测试环节&#xff0c;主要目的是在实车环境上验证VCU最常规的功能&#xff0c;对HIL测试台架无法模拟的工况进行补充测试…

孤独症托养无需家长陪护中心:守护每一份独特的星光

在星贝育园&#xff0c;作为一所专业的孤独症寄宿学校&#xff0c;我们致力于为孤独症儿童提供最全面、最专业的康复与成长环境。以下是我们的主要优势&#xff1a; 一、专业的师资团队 星贝育园拥有一支经验丰富、专业素养极高的教师团队。我们的教师不仅具备深厚的…

【杨辉三角】打印杨辉三角前10行

杨辉三角&#xff08;Pascals Triangle&#xff09;是一个由数字组成的三角形&#xff0c;具有许多有趣的数学性质。每个数字是其上方两个数字之和。它的第一行和第一列都是1&#xff0c;形成的结构如下 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 …

TCP 粘包问题

TCP是一个面向字节流的传输层协议。“流” 意味着 TCP 所传输的数据是没有边界的。这不同于 UDP 协议提供的是面向消息的传输服务&#xff0c;其传输的数据是有边界的。TCP 的发送方无法保证对方每次收到的都是一个完整的数据包。于是就有了粘包、拆包问题的出现。粘包、拆包问…

为什么最近多模态大模型工作中用Q-Former结构的变少了?

前言 训练资源有限的情况下&#xff08;有限的 GPU、训练数据等&#xff09;&#xff0c;Q-former 也只是一个“低效”压缩器。如果想减少图片 token 数量来降低训练代价&#xff0c;简单的 AdaptiveAveragePooling 就够了。 转载自丨PaperWeekly 我们组最近的工作 DeCo: De…

Eagle 4.0:强大插件加持的素材收集管理工具

期待很久的全新 Eagle 4.0 现已正式推出了&#xff01; Eagle 是一款 Win / Mac 双平台素材收集管理工具&#xff0c;它可以帮你高效整理电脑中的图片、字体、视频、音频等各种素材&#xff0c;是众多设计师、美图收集爱好者的信赖之选。 4.0 版是一次全面的革新&#xff0c;从…

二十三设计模式速记

文字版 Java设计模式通常被分为三大类&#xff1a;创建型模式&#xff08;Creational Patterns&#xff09;、结构型模式&#xff08;Structural Patterns&#xff09;和行为型模式&#xff08;Behavioral Patterns&#xff09;。每种类型包含若干种具体的设计模式。 创建型模…