Vue学习计划-Vue2--Vue核心(三)methods和computed

Vue

1. 事件 v-on @

  1. 基础

  2. 使用 v-on:xxx或者@xxx绑定事件,其中xxx是事件名

  3. 事件的回调需要配置在methods对象中,最终会在vm上

  4. methods中配置函数,不要用箭头函数,否则this就不是vm了

  5. methods中配置函数,都是被Vue管理的函数,this指向 vm 或者 组件实例对象

  6. @click="demo"和@click=demo($event)效果一致,但是后者可以传参

  7. 事件修饰符

  8. prevent: 阻止默认事件(常用)

  9. once: 事件只触发一次(常用)

  10. stop: 阻止事件冒泡(常用)

  11. capture: 使用事件的捕获模式 --> 给父级加

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

  13. passtive: 事件的默认行为立即执行,无需要等待事件回调执行完毕

  14. @click.stop.prevent = 可以链式写法

注意:

  1. .self和.stop 都可以阻止事件冒泡,有什么区别呢?
    1. .stop 是阻止事件向外继续冒泡,当你给了子级.stop后他的父级就不会冒泡;
    2. .self 是我只让自己不冒泡,其他人我不管
    <div @click = 'fatherClick'> <div @click.self="sonClick" style="padding:10px;background-color: aqua;"><p @click="childClick">self阻止冒泡</p></div><div @click="sonClick" style="padding:10px;background-color: aqua;"><p @click.stop="childClick">stop阻止冒泡</p></div>
    </div>
    

案例:

<body><div id="app"><!-- 1. 阻止默认事件: .prevent --><a :href="url" @click.prevent>跳转</a><br><!-- 2. 事件只触发一次: .once -->{{ count }}<button v-on:click.once = "count++">add</button><br><!--3.  阻止事件冒泡: .stop --><div @click="divClick"><p @click.stop="pClick">冒泡事件</p><p @click="stopClick">冒泡事件vue之前</p></div><br><!-- 4. 采用事件的捕获模式 .capture --><div @click= 'fatherClick'><div @click.capture="divClick" style="padding: 20px;"><p @click="pClick">捕获模式</p></div></div><br><!-- 5. 只有event.target是当前操作的元素时才触发事件: self --><div @click.self="selfClick" style="padding:10px;background-color: aqua;"><p @click="pClick">self</p></div><hr><!-- #region .self 和.stop区别--><!-- .stop 是阻止事件向外继续冒泡,当你给了子级.stop后他的父级就不会冒泡.self 是我只让自己不冒泡,其他人我不管--><div @click = 'fatherClick'> <div @click.self="selfClick" style="padding:10px;background-color: aqua;"><p @click="pClick">self阻止冒泡</p></div><div @click="selfClick" style="padding:10px;background-color: aqua;"><p @click.stop="pClick">stop阻止冒泡</p></div></div><br><!-- #endregion --><!-- 7.链式写法 --><div @click='fatherClick'><a :href="url" @click.stop.prevent>链式写法</a></div></div><script>new Vue({el: '#app',data: {count: 1,url:'https://www.baidu.com/'},methods: {// #region// 冒泡捕获 div标签divClick(){console.log('div');},// 冒泡捕获 p标签pClick(){console.log('p');},// 阻止冒泡事件 旧stopClick(e){console.log(e);e.stopPropagation();},// 比较.self和.stop事件fatherClick(){console.log('父级');},// self自身事件selfClick(e){console.log(e.target);},// #endregion},})</script>
</body>
  1. 键盘事件 @keyup @keydown
vue之前键盘事件:
@keyup = "show"
methods:{
show(e){if(e.keyCode !== 13) returnconsole.log(e.target.value)
}
}
  1. Vue中常见的按键别名:
    回车 => enter删除 => delete退出 => esc空格 => space换行 => tab (配合keydown使用)上 => up下 => down左 => left右 => right
  1. Vue未提供别名的按键,可以使用按键原始的key值去绑定,但要注意转为kebeb-case(短横线命名)
  2. 系统修饰键(用法特殊): shift, ctrl, alt, meta(win)
    1. 配合keyup使用,按下修饰键的同时,再按下其他的键,随后释放其他键,事件才会被触发

      @keyup.ctrl | @keyup.ctrl.y 可以链式

    2. 配合keydown使用,正常触发事件

  3. 也可以使用keyCode去指定具体的按键(不推荐,被淘汰)
    <input type="text" @keyup.13="clickEvent" placeholder="huiche">
  4. Vue.config.keyCode.自定义键名 = 键码,可以去定制按键别名(不推荐)
    <input type="text" @keyup.huiche="clickEvent" placeholder="huiche">Vue.config.keyCodes.huiche = 13

案例:

<body><div id="app"><!-- vue之前键盘事件 --><input type="text"  @keyup="show" placeholder="show"><br><!-- #region 1. vue键盘别名 --><!-- enter事件 --><input type="text"  @keyup.enter="clickEvent" placeholder="enter"><br><!-- delete事件 --><input type="text"  @keyup.delete="clickEvent" placeholder="delete"><br><!-- esc事件 --><input type="text"  @keyup.esc="clickEvent" placeholder="esc"><br><!-- space事件 --><input type="text"  @keyup.space="clickEvent" placeholder="space"><br><!-- tab事件 --><input type="text" @keydown.tab="clickEvent" placeholder="tab"><br><!-- up事件 --><input type="text" @keyup.up="clickEvent" placeholder="up"><br><!-- down事件 --><input type="text" @keyup.down="clickEvent" placeholder="down"><br><!-- left事件 --><input type="text" @keyup.left="clickEvent" placeholder="left"><br><!-- right事件 --><input type="text" @keyup.right="clickEvent" placeholder="right"><hr><!-- #endregion --><!-- 2. 未提供别名的按键 --><input type="text" @keyup.caps-lock="clickEvent" placeholder="caps-lock"><input type="text" @keyup.a="clickEvent" placeholder="a"><hr><!-- 3. 系统修饰符 --><input type="text" @keyup.shift="clickEvent" placeholder="shift"><br><input type="text" @keyup.ctrl="clickEvent" placeholder="ctrl"><br><input type="text" @keydown.alt="clickEvent" placeholder="alt"><br><!-- 可以链式 --><input type="text" @keyup.ctrl.x="clickEvent" placeholder="ctrl+x"><br><input type="text" @keyup.huiche="clickEvent" placeholder="huiche"><input type="text" @keyup.40="clickEvent" placeholder="huiche"></div><script>Vue.config.keyCodes.huiche = 13var vm = new Vue({el: '#app',methods: {show(e){if(e.keyCode !== 13) returnconsole.log(e.keyCode, e.target.value);},clickEvent(e){console.log(e.code, e.keyCode, e.target.value);},},})</script>
</body>

2. 计算属性(computed)

  1. 引入: 姓名案例, 模板语法:vue官网风格指南=> 模板中简单表达式
  2. 定义:要用的属性不存在,要通过已有 的属性计算得来
  3. 原理: 利用Object.defineProperty方法提供的getter和setter
  4. get函数什么时候执行?
    1. 初次读取时会执行一次
    2. 当依赖的数据发生改变时会被再次调用
  5. 优势:与methods实现相比,内部有缓存机制(复用),效率更高,调试方便
  6. 备注:
    1. 计算属性最终会出现在vm上,直接读取使用即可
    2. 如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算属性依赖的数据发生变化
const vm = new Vue({
el: '#APP',
data:{firstName: '张',lastName: '三'
},
computed:{// 1. 完整写法fullName:{// get有什么作用?当有人读取fullName时,get就会被调用,且返回值就是fullName的值// 计算属性有缓存// get什么时候被调用? 1. 初次读取数据会执行一次  2. 当依赖的数据发生改变时会被再次调用get(){console.log('get被调用了')console.log(this) // this指向vmreturn this.firstName + '-' + lastName},// set有什么作用? 当每次修改fullName时,就会调用setset(value){const arr = value.split('-')// 计算属性是依赖 firstName,lastName计算出来的,改变fullName需要把依赖的数据改变this.firstName = arr[0]this.lastName = arr[1]}},// 2. 简写, // 确定只是读取,不对fullName做修改,可以简写// fullName就是计算属性的名称fullName(){return this.firstName + '-' + this,lastName}}
})

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

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

相关文章

Seata使用

本文以seata-server-1.5.2&#xff0c;以配置中心、注册中心使用Nacos&#xff0c;store.modedb&#xff08;mysql&#xff09;为例进行操作。 一、Seata Server端 1、下载seata server 链接: http://seata.io/zh-cn/blog/download.html下载压缩包&#xff0c;解压至非中文目录…

Java技术栈 —— 微服务框架Spring Cloud —— Ruoyi-Cloud 学习(一)

Ruoyi-cloud 项目学习 一、项目环境搭建与启动1.1 nacos安装部署1.1.1 nacos安装、启动1.1.2 nacos部署 1.2 seata安装部署1.3 后端部署与运行1.3.1 ruoyi-modules-file模块运行报错 1.4 nginx安装、部署、配置与启动1.5 redis安装与部署1.6 前段框架知识1.7 项目启动1.8 参考 …

实用方法 | 搭建真正满足用户需求的在线帮助中心

随着互联网的普及和信息技术的快速发展&#xff0c;客户服务和支持变得越来越重要。为了提高客户满意度和维持良好的品牌形象&#xff0c;越来越多企业都开始搭建自己的在线帮助中心。 不知从何下手&#xff1f;细想一下&#xff0c;搭建在线帮助中心主要就是为了解决用户的问…

根据java类名找出当前是哪个Excel中的sheet

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

shell_81.Linux在命令行中创建使用函数

在命令行中使用函数 在命令行中创建函数 两种方法 单行方式来定义函数&#xff1a; $ function divem { echo $[ $1 / $2 ]; } $ divem 100 5 20 $ 当你在命令行中定义函数时&#xff0c;必须在每个命令后面加个分号&#xff0c;这样 shell 就能知道哪里是命令的起止了&am…

反射实现tomcat

获取类信息的方法 1.通过类对象 x.getClass() 2.通过class.forname方法 Class.forname(className);这里className是存储类名的字符串 3.通过类名.class 类名.class 通过类名创建对象 类名.newInstance&#xff08;&#xff09;&#xff1b; 反射可以看到类的一切信息&#xff1…

C语言联合和枚举讲解

目录 联合体的大小 联合体如何省空间 巧用联合体 联合判断大小端&#xff08;惊为天人&#xff0c;大佬写的&#xff0c;我借鉴&#xff09; 枚举 枚举类型的使用 首先我们先看一下菜鸟教程中的对C语言联合体的说明 联合体的大小 #include <stdio.h> union u {char…

Proteus仿真--基于ADC0808设计的调温报警器

本文介绍基于ADC0808实现的调温报警器设计&#xff08;完整仿真源文件及代码见文末链接&#xff09; 温度调节使用滑动变阻器模拟实现&#xff0c;ADC0808采集信号并输出在LCD上面显示&#xff0c;报警系统是LED灯和蜂鸣器实现声光电报警 仿真图如下 仿真运行视频 Proteus仿真…

Java实现二分法的案例,什么是二分法

文章目录 Java实现二分法的案例&#xff0c;什么是二分法二分法实现 Java实现二分法的案例&#xff0c;什么是二分法 二分法 概念&#xff1a; 二分法&#xff08;Bisection method&#xff09; 即一分为二的方法&#xff0c;又叫折半查找方法。把一组有序数列分为左右两部分…

前程无忧接口分析

前程无忧接口分析 所需用到的工具URL解析通过抓包软件或者开发者选项抓取数据包对代码中的参数解析分析对acw_sc__v2进行分析对acw_sc__v2进行转换代码生成生成outPutList数组生成arg2参数生成arg3参数最终的效果 对详情页面的分析对timestamp__1258的生成分析 所需用到的工具 …

Vue3.0优点详解

相对于Vue2.0 3.0有了比较大的改进&#xff0c;优势主要有以下几点&#xff1a; 一、性能提升 1、Vue3.0的响应式系统使用了Proxy代理对象&#xff0c;取代了Vue2.0中的Object.defineProperty&#xff0c;使得Vue3.0的响应式系统更快、更灵活。 2、Vue3.0对TypeScript的支持更…

Ubuntu22.04安装完成后便可直接使用键盘上的Print键进行截图

概要&#xff1a;Ubuntu22.04安装完成后&#xff0c;无需安装什么截图软件&#xff0c;可以直接使用键盘上的Print键进行截图。 1、按一下Print键 我的电脑上Print键是PrtSc&#xff0c;如下图所示 2、框选区域并截图 如下图中&#xff0c;可以框选(Selection)&#xff0c;也…

【教学类-35-06】17号的学号字帖延伸出的全体字帖(1-9去0)(A4竖版1份)

作品展示 背景需求&#xff1a; 给大4班17号同学单独做了一个学号字帖后&#xff0c;我想可以把这样的学具用在中班&#xff08;我马上要成为中4班老师了&#xff09;&#xff0c;那就需要给全班做一份这样的大号学号贴。 使用17号同学的word模板&#xff08;见下文&#xff…

3dMax vs Cinema4d哪个更好更适合你?

Cinema 4d和3dMax的区别 用于游戏风格、开发和风格可视化的3D建模、动画和渲染软件系统&#xff0c;为用户提供制作和编辑动画、视觉效果和环境的灵活性。4D CINEMA可能是由MAXON构建的强大的3D建模、运动图形、绘画和动画软件系统。Cinema 4D将在每个Windows和MAC操作系统上运…

多目标追踪评价指标

多目标追踪性能评价 基础&#xff1a; GT&#xff1a;Ground Truth&#xff0c;是指真实的标签或者真实的对象&#xff1b; TP&#xff1a;True Positive&#xff0c;被正确预测检测到的样本&#xff1b; TN&#xff1a;True Negative&#xff0c;被预测为负的负样本&#…

啃下这50道笔试题,你就是SQL专家!(附答案,收藏备用)

【关注微信公众号&#xff1a;跟强哥学SQL&#xff0c;回复“笔试”免费领取大厂SQL笔试题。】 有两个名为Department&#xff08;部门&#xff09;和Employees&#xff08;员工&#xff09;的表结构如下&#xff1a; CREATE TABLE Department ( DepId int, DepName va…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑两阶段鲁棒优化配置的多微网合作博弈》

这个标题涉及到多个概念&#xff0c;让我们逐步解读&#xff1a; 考虑两阶段鲁棒优化配置&#xff1a; 两阶段&#xff1a; 指的是在解决问题或进行优化时&#xff0c;可能存在两个不同的阶段或步骤。这表明问题的解决不是一步完成的&#xff0c;而是需要经过多个步骤或阶段。鲁…

前端学习系列之CSS

目录 CSS 简介 发展史 优势 基本语法 引用方式 内部样式 行内样式 外部样式 选择器 id选择器 class选择器 标签选择器 子代选择器 后代选择器 相邻兄弟选择器 后续兄弟选择器 交集选择器 并集选择器 通配符选择器 伪类选择器 属性选择器 CSS基本属性 优…

virtualenv创建虚拟环境

目录 概念安装创建虚拟环境激活虚拟环境删除虚拟环境退出虚拟环境更改虚拟环境路径概念 virtualenv是一个创建隔离的Python运行环境的工具。它允许用户为每个Python项目创建一个独立的虚拟环境,以避免不同项目之间的依赖冲突。 安装 pip install virtualenv virtualenvwrapper…

JS如何实现竖屏轮播图

首先是HTML搭建结构 <div class"banner-box"><div class"bannerbox"><div class"banner"><a class"a-img-ban"> <img class"img-ban" src"./img/640 (4).jpg" alt"终于等到你还…