vue中的事件修饰符、表单双向数据绑定和计算属性

目录

一、事件修饰符

二、表单双向数据绑定

模拟双向数据绑定(双向数据绑定底层原理)

三、计算属性

计算属性和methods方法区别?

计算属性和watch区别?


一、事件修饰符

  stop 阻止事件冒泡
  prevent 阻止事件默认行为 
  capture 事件捕获阶段执行
  self  仅当当前元素是event.target触发 
  once 执行一次事件 
  passive 与scroll滚动事件连用

<div id="app">
        <!-- capture 事件捕获阶段执行 -->
        <div class="outer" @click.capture="outer">
        <!-- stop事件修饰符阻止事件冒泡 -->
        <div class="inner" @click.stop="inner"></div>
        </div>

        <!-- self 事件修饰符 仅当前元素是event.target(当前事件触发元素)时才触发 事件修饰符可以连用 -->
        <div class="outer" @click.capture.self="outer">
            <div class="inner" @click.capture="inner"></div>
        </div>

        <!-- once 事件修饰符 事件只绑定(生效)一次 -->
        <div class="outer" @click.capture="outer">
            <div class="inner" @click.capture.once="inner"></div>
        </div>

        <!-- prevent事件修饰符 阻止元素默认行为 -->
        <a href="https://wwww.baidu.com" @click.prevent="toJump">百度一下</a>

        <!-- passive 事件修饰符 提升移动端滚动性能 -->
        <div class="scroll" @scroll.passive="scroll">
            我是一个div我是一个div我是一个div我是一个div我是一个div我是一个div我是一个div
            我是一个div我是一个div我是一个div我是一个div我是一个div我是一个div我是一个div
            我是一个div我是一个div我是一个div我是一个div我是一个div我是一个div我是一个div
        </div>

        <!-- 按键修饰符 按下按键之后才会触发 -->
        <input type="text" @keyup.13="keyup">
        <input type="text" @keyup.enter="keyup">
    </div>
    <script>
        let vm = new Vue({
            // 与模板绑定
            el: "#app",
            // 数据模型 存放vue变量
            data: {

            },
            // 存放方法和事件处理程序
            methods: {
                keyup(){
                    console.log(event.keyCode);
                },
                scroll(){
                    console.log('正在滚动');
                },
                toJump() {
                    // 阻止a标签默认行为
                    // event.preventDefault();
                },
                outer() {
                    console.log('outer');
                },
                inner() {
                    console.log('inner');
                    // 阻止事件冒泡
                    // event.stopPropagation();
                }
            },
        });

    </script>

二、表单双向数据绑定

  v-model 监听用户输入事件以更新数据 创建双向数据绑定 
  v-model修饰符:
    lazy  输入事件input事件 change事件 失焦或者按下回车
    number 将输入框双向绑定得数据设置为number类型
    trim  过滤绑定数据前后空格

<div id="app">
        <!-- v-model语法糖 可以根据表单控件类型正确更新元素  监听用户输入事件更新数据 -->
        {{form}}
        用户名:<input type="text" v-model="form.username">
        <br>
        密码:<input type="password" v-model="form.password">
        <br>
        <label>男:<input type="radio" v-model="form.gender" value="male"></label>
        <label>女:<input type="radio" v-model="form.gender" value="famale"></label>
        <br>
        爱好:
        游泳:<input type="checkbox" v-model="form.hobbies" value="swimming">
        篮球:<input type="checkbox" v-model="form.hobbies" value="basketball">
        足球:<input type="checkbox" v-model="form.hobbies" value="football">
        <br>
        描述:<textarea v-model="form.desc" cols="30" rows="10"></textarea>
        <br>
        城市:
        <select v-model="form.city">
            <optgroup label="一线城市">
                <option value="beijing">北京</option>
                <option value="shanghai">上海</option>
                <option value="guangzhou">广州</option>
            </optgroup>
        </select>
    </div>
    <script>
        let vm = new Vue({
            // 与模板绑定
            el:"#app",
            // 数据模型 存放vue变量
            data:{
                form:{
                    hobbies:[]
                },
            },
            // 存放方法和事件处理程序
            methods: {

            },
        });
        
    </script>

模拟双向数据绑定(双向数据绑定底层原理)

    利用Object.defineProperty()

<!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>
    <!-- 实现v-model -->
    <p>极简版双向数据绑定</p>
    <input type="text">
    <script>
        var p = document.querySelector('p');
        var input = document.querySelector('input');
        let obj = {
            name:""
        }
        Object.defineProperty(obj,'name',{
            get(){
                return obj.name
            },
            set(newValue){
                p.innerHTML = newValue
            }
        })
        // 监听用户输入框输入的事件
        input.oninput = function(){
            obj.name = event.target.value;
        }
    </script>
</body>
</html>

浏览器运行结果如下:


三、计算属性

       对data中数据进行逻辑处理返回一个响应式数据,基于响应式依赖(data),只要响应式依赖不发生改变,计算属性就不会重新计算,多次调用计算属性会返回之前计算得结果。有缓存性,计算属性默认只提供getter,只允许读取,不允许修改,想要修改计算属性,需要提供setter函数。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        {{msg.split('').reverse().join('')}}
        {{reverseMsg}}
        {{reverseMsg}}
        {{reverseMsg}}
        {{reverseMsg}}
        {{reverse()}}
        {{reverse()}}
        {{reverse()}}
        {{reverse()}}
    </div>
    <script>
        let vm = new Vue({
            // 与模板绑定
            el:"#app",
            // 数据模型 存放vue变量
            data:{
                msg:'hello'
            },
            // 存放方法和事件处理程序
            methods: {
                reverse(){
                    console.log('methods方法');
                    return this.msg.split('').reverse().join('')
                }
            },
            // 计算属性--一般对data中数据处理后再返回一个数据 基于响应式依赖缓存  返回一个响应式依赖
            computed:{
                reverseMsg(){
                    console.log('计算属性');
                    return this.msg.split('').reverse().join('')
                }
            }
        });
        setTimeout(()=>{
            vm.msg = 'world'
        },2000)
    </script>
</body>
</html>

浏览器运行结果如下:

2s后:


计算属性和methods方法区别?

  1.计算属性有缓存性,响应式依赖不发生改变,多次调用计算属性会返回之前得计算结果。
  2.methods多次调用会多次执行函数,没有缓存性。
  3.计算属性一般不用于异步操作,methods可以处理异步操作。
  4.可以定于计算属性被修改,不仅可读。

计算属性和watch区别?

  1.计算属性具有缓存性,响应式依赖不发生改变计算属性不会重新计算,会返回之前得计算结果
  2.watch不具有缓存性,只要数据发生改变watch就会立即执行
  3.watch一般用于异步操作(监听分页)或者开销较大操作
  4.计算属性一般不用于异步操作,只提供getter需要修改需要设置setter函数


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TensorRT-Alpha FAQ

1、linux下出现错误&#xff1a; libyolov8.so: undefined reference to sample::splitToStringVec(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char) collect2: error: ld returned 1 exit status CMa…

竞赛保研 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖&#xff0c;适合作为竞…

IDEA常用快捷键一

一、文本编辑 1、Ctrl X &#xff1a;剪切 剪切选中的文本&#xff0c;若是没有选中&#xff0c;则剪切当前行。 2、CtrlC&#xff1a;复制 复制选中文本&#xff0c;若未选中则复制当前行。 3、CtrlV&#xff1a;粘贴 4、Ctrl Shift V: 从历史中选择粘贴 从历史剪…

Stream 流详细总结

Stream 流详细总结 一、Stream 是什么二、流的创建1、Stream 创建2、Collection 集合创建&#xff08;最常见的一种&#xff09;3、Array 数组创建4、文件创建5、函数创建 三、流的操作1、中间操作distinct 去重filter 过滤map 映射flatMap 映射汇总sorted 排序limit 截断skip …

LTE之接口协议

一、接口协议栈 接口是指不同网元之间的信息交互方式。既然是信息交互&#xff0c;就应该使用彼此都能看懂的语言&#xff0c;这就是接口协议。接口协议的架构称为协议栈。根据接口所处位置分为空中接口和地面接口&#xff0c;响应的协议也分为空中接口协议和地面接口协议。空…

mysql复习笔记06(小滴课堂)

mysql数据安全之备份的背景意义 介绍数据备份 mysql数据安全之mysqldump备份实例&#xff08;跨机器&#xff09; 一般存在于mysql的bin目录下。中小型企业&#xff0c;数据量不是特别大的时候可以使用这个方式备份。 可以看到备份过来的库了。这是备份单个数据库。 如果想备份…

龙芯loongarch64服务器编译安装tensorflow-io-gcs-filesystem

前言 安装TensorFlow的时候,会出现有些包找不到的情况,直接使用pip命令也无法安装,比如tensorflow-io-gcs-filesystem,安装的时候就会报错: 这个包需要自行编译,官方介绍有限,这里我讲解下 编译 准备 拉取源码:https://github.com/tensorflow/io.git 文章中…

论文写作工具 - 基于Tkinter的AI模型与文档处理

本工具不开源&#xff0c;需要的联系chsengni163.com 论文写作工具 - 基于Tkinter的AI模型与文档处理 概述 这个工具是一个基于Python的Tkinter库创建的图形用户界面应用&#xff0c;旨在帮助用户利用AI模型编写论文并自定义文档格式。通过结合AI技术和文档处理功能&#xf…

java八股 设计模式

企业场景篇-03-设计模式-工厂设计模式-工厂方法模式_哔哩哔哩_bilibili 1.简单工厂模式 新加咖啡类的时候需要在唯一的那个工厂类里加代码&#xff0c;这样就耦合了 2.工厂模式 相对于简单模式的一个工厂生产所有咖啡&#xff0c;这里只定义了一个抽象咖啡工厂&#xff0c;然…

【数据结构】最短路径算法实现(Dijkstra(迪克斯特拉),FloydWarshall(弗洛伊德) )

文章目录 前言一、Dijkstra&#xff08;迪克斯特拉&#xff09;1.方法&#xff1a;2.代码实现 二、FloydWarshall&#xff08;弗洛伊德&#xff09;1.方法2.代码实现 完整源码 前言 最短路径问题&#xff1a;从在带权有向图G中的某一顶点出发&#xff0c;找出一条通往另一顶点…

FPGA设计时序约束十三、Set_Data_Check

目录 一、序言 二、Set Data Check 2.1 基本概念 2.2 设置界面 2.3 命令语法 三、工程示例 3.1 工程代码 3.2 约束设置 3.3 时序报告 四、参考资料 一、序言 通常进行时序分析时&#xff0c;会考虑触发器上时钟信号与数据信号到达的先后关系&#xff0c;从而进行setu…

文字编辑软件,批量给多个文本添加文档内容

在当今信息爆炸的时代&#xff0c;文字编辑工作是很多人需要面对的&#xff0c;而怎么快速的完成编辑工作&#xff0c;则是很多人所思考解决的。现在有一款很好用的软件——首助编辑高手&#xff0c;可以批量对多个文本文档内容进行处理&#xff0c;能帮你在文字编辑的工作上节…

开关电源厚膜集成电路引脚功能

开关电源厚膜集成电路引脚功能 一、 STR51213、STR50213、STR50103 引脚号 引脚功能 1 接地&#xff0c;内接稳压基准电路 2 开关管基极 3 开关管集电极 4 开关管发射极 5 误差比较电压信号输入&#xff0c;兼待机控制 二、 STR3302、STR3202 引脚号 引脚功能 1内部半…

融资项目——swagger2接口分类配置

在一般开发中&#xff0c;各种Controller可能会被分为两种&#xff1a;后台管理员的相关Controller与用户的相关Controller。所以在使用swagger2的时候&#xff0c;我们也希望其分为两个大类。其解决方法如下&#xff1a; Configuration EnableSwagger2 public class Swagger2…

基于docker-compose 安装Sonar并集成gitlab

文章目录 1. 前置条件2. 编写docker-compose-sonar.yml文件3. 集成 gitlab4. Sonar Login with GitLab 1. 前置条件 安装docker-compose 安装docker 创建容器运行的特有网络 创建挂载目录 2. 编写docker-compose-sonar.yml文件 version: "3" services:sonar-postgre…

DFS与BFS算法总结

知识概览 DFS、BFS都可以对整个问题空间进行搜索&#xff0c;搜索的结构都是像一棵树。DFS会尽可能往深搜&#xff0c;当搜索到叶节点时就会回溯。而BFS每一次只会扩展一层。 DFS与BFS的区别&#xff1a; 搜索方式数据结构空间复杂度性质DFS栈O(h)&#xff0c;其中h为搜索空间…

Epson打印机连接wifi

环境 Epson L3153 打印机联通无线光猫 背景 最近家里的联通宽带不太稳定&#xff0c;经常断网。今天打了联通客服电话&#xff0c;师傅上门来&#xff0c;说可能是光猫用的时间太长了&#xff0c;换了一个新的联通光猫&#xff0c;问题解决。 wifi的名称是 CU_Y3ft 和 CU_Y3…

ARM 点灯

.text .global _start _start: led1设置GPIOE时钟使能 RCC_MP_AHB4ENSETR[4]->1 0X50000A28LDR R0,0X50000A28 指定寄存器地址LDR R1,[R0] 将寄存器数值取出来放在R1中ORR R1,R1,#(0x1<<4) 将第4位设置为1STR R1,[R0] 将修改后的值写回去设置PE10为输出 GPIOE…

RocketMQ事务消息实现分布式事务

文章目录 简介实现原理实现逻辑 简介 RocketMQ事务消息 RocketMQ在4.3.0版中支持分布式事务消息&#xff0c;这里RocketMQ的事务消息是采用2PC(两段式协议) 补偿机制&#xff08;消息回查&#xff09;的分布式事务功能。提供消息发送与业务落库的一致性。 RocketMQ事务消息&am…

强化学习(五)-Deterministic Policy Gradient (DPG) 算法及公式推导

针对连续动作空间&#xff0c;策略函数没法预测出每个动作选择的概率。因此使用确定性策略梯度方法。 0 概览 1 actor输出确定动作2 模型目标&#xff1a; actor目标&#xff1a;使critic值最大 critic目标&#xff1a; 使TD error最大3 改进&#xff1a; 使用两个target 网络…