Vue2的学习

computed计算属性

概念

基于现有数据,计算出来的新属性,依赖的数据变化,会自动重新计算

语法
  • 声明在computed配置项中,一个计算属性对应一个函数
  • 这是一个属性{{计算属性名}},不是方法
  • 注意不要忘记return
<body>
<div id="app"><ul><li v-for="arr in list">{{arr.name}}&nbsp&nbsp&nbsp&nbsp&nbsp个数:{{arr.num}}个</li></ul><p>礼物总数:{{totalCount}}</p>
</div>
<script src="../lib/vue.js"></script>
<script>const app=new Vue({el:'#app',data:{list:[{id:1,name:'篮球',num:1},{id:2,name:'玩具',num:2},{id:3,name:'铅笔',num:5}]},computed:{totalCount(){console.log(this.list)let total=this.list.reduce((sum,item)=>sum+item.num,0)return total}}})
</script>
</body>
computed计算属性与methods方法的区别
  • computed计算属性

作用:封装一段对于数据的处理,得一个结果

语法:写在computed配置项中,作为属性,直接使用this.计算属性{{计算属性}}

  • methods方法

作用:给试了提供一个方法,调用来处理业务逻辑

语法:写在methods配置项中,作为方法,需要调用this.方法名()   {{方法名()}}   @事件名="方法名"

计算属性完整写法
username:{get(){return this.firstName+this.lastName},set(){}
}

上一段代码和下面这一段简写的代码等价:

username(){return this.firstName+this.lastName
}

完整属性是再加上set()

<body><div id="app">姓:<input type="text" v-model="firstName">+名:<input type="text" v-model="lastName">={{username}}<br><button @click="changeName">改名</button></div><script src="../lib/vue.js"></script><script>const app=new Vue({el:'#app',data:{firstName:'刘',lastName:'备'},methods:{changeName(){console.log('点击')this.username='吕xiao布'}},computed:{username:{get(){return this.firstName+this.lastName},set(value){this.firstName=value.slice(0,1)this.lastName=value.slice(1)}}}})</script>
</body>

补充

阻止默认行为,并设置点击事件:@click.prevent=""
<td @click.prevent="del(arr.id)"><a href="https://www.baidu.com/">删除</a></td>
methods:{del(id){this.list=this.list.filter(arr=>arr.id!=id)}
}

此时就不会默认进入百度的页面,而是执行del(id)方法

相除保留几位小数(被除数不能为零)

10/this.list.length.toFixed(2)    //保留两位小数

局部样式
<style scoped>}
</style>

scoped原理:css选择器都会被添加上一个自定义属性(date-v-hash值)

watch监视器

作用

监视数据变化,执行一些业务逻辑或异步操作

语法
  • 简单写法:简单配置项,直接监视
  • 完整写法:添加额外配置项
    • deep:true 对复杂类型深度见识
    • immediate:true 初始化立刻执行一次handler方法
方法名是不能出现特殊字符的

那么对于list.num的监听,要如何写?

data:{words1:'',obj:{words2:''}
},
watch:{words1(newValue,oldValue){console.log('变',newValue,oldValue)},'obj.word2'(newValue,oldValue){console.log('变',newValue,oldValue)}
}

加上'',此时就可以监听到obj.words2了

简单写法 
<-简单写法->
<body><div id="app"><div><input type="text" v-model="obj.words"></div><div><input type="text" v-model="result"></div></div><script src="https://unpkg.com/axios/dist/axios.min.js"></script><script src="../lib/vue.js"></script><script>const app=new Vue({el:'#app',data:{obj:{words:''},result:'',timer:null//延时器id},watch:{'obj.words'(newValue){//防抖处理,延时执行clearTimeout(this.timer)this.timer=setTimeout(async()=>{console.log('变',newValue)const res=await axios({url:'https://applet-base-api-t.itheima.net/api/translate',params:{words: newValue}})this.result=res.data.dataconsole.log(res.data.data)},300)}}})</script>
</body>
完整写法
   data:{obj:{words:'',lang:'italy'},result:'',timer:null//延时器id},watch:{obj:{deep:true,immediate:true,handler(newValue){clearTimeout(this.timer)this.timer=setTimeout(async()=>{console.log('变',newValue)const res=await axios({url:'https://applet-base-api-t.itheima.net/api/translate',params:newValue})this.result=res.data.dataconsole.log(res.data.data)},300)}}}})

此时监控了两个值的变化,一个是选择语言——obj.lang,还有输入框的变化——obj.words。

其中immediate:true是立刻执行,即使没有发生变化,也会执行一遍,这条语句可省。

生命周期

Vue生命周期:一个Vue实例从创建到销毁的整个过程

  • 创建阶段(响应式数据)
  • 挂载阶段(渲染模板)
  • 更新阶段(数据修改,更新视图)
  • 销毁阶段(销毁实例)

生命周期过程中,会自动运行一些函数,被称为【生命周期钩子】=>让开发者可以在【特定阶段】运行自己的代码

工程化开发&脚手架Vue CLI

基本介绍

Vue CLI是Vue官方提供的一个全局命令工具,可以快速创建一个开发Vue项目的标准化基础架子

使用步骤

  • 创建项目架子:vue create project-name(项目名不能用中文名)
  • 启动项目:yarn server或npm run serve(找package.json)

组件化开发&根组件

  • 组件化:一个页面可以拆分为一个个组件,每个组件有着自己独立的结构、样式、行为。好处:便于维护,利于复用,提升开发效率
  • 组件分类:普通组件、根组件
  • 根组件:整个应用最上层的组件,包裹所有普通组件

  • template结构(在vue2中只能有一个根结点)
  • style样式(可以支持less,需要装包less和less-loader)
  • script行为

普通组件的注册使用

注册的两种方式;

  • 局部注册:只能在注册内的组件内使用
    • 创建.vue文件(三个组成部分)
    • 在使用的组件内导入并注册
import Vue from '.vue文件路径'
import App from './components/HmHeader'export default{//局部注册component:{'组件名':组件对象,HmHeader:HmHeader}
}

使用:当成html标签使用`<组件名></组件名>`

注意:组件名规范(大驼峰命名法)

  • 全局注册:所有组件内都能使用
    • 创建.vue文件(三个组成部分)
    • main.js中进行全局注册
//导入需要全局注册的组件
import HmButton from './components/HmButton'
//调用Vue.component进行全局注册
//Vue.component('组件名',组件对象)
Vue.component('HmButton',HmButton)

使用:当成html标签使用`<组件名></组件名>`

组件通信

父子关系(props和$emit)

什么是prop

  • prop定义:组件上注册的一些自定义属性
  • prop作用:向子组件传递数据

特点

  • 可以传递任意数量的prop
  • 可以传递任意类型的prop

有时需要props校验,不符合要求会出现错误提示

  • 类型校验
  • 非空校验
  • 默认值
  • 自定义校验
props:{校验的属性名: {type:类型,required:true,//是否必填default:默认值,//默认值validator(value){//自定义校验逻辑return 是否通过校验}}
},

prop和data的比较

共同点:都可以给组件提供数据

区别:

  • data的数据是自己的,可以随便改
  • prop的数据是外部的,要遵循单向数据流(谁的数据谁负责)
非父子关系(eventbus)

作用:非父子组件之间,进行建议消息传递(复杂场景->Vue)

1.创建一个都能访问到的事件总线(空Vue实例)->utils/EventBus.js

2.A组件(接收方),监听Bus实例的事件 

3.B组件(发送方),触发Bus实例的事件 

非父子关系(provide&inject)

作用:跨层级共享数据

1.父组件provide提供数据

export default{provide(){return{//普通类型【非响应式】color:this.color,//复杂类型【响应式】userinfo:this.userInfo}}}

2.子/孙组件inject取值使用

export default{inject:['color','userInfo'],created(){console.log(this.color,this.userInfo)}
}

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

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

相关文章

uniapp开发h5,解决项目启动时,Network: unavailable问题

网上搜了很多&#xff0c;发现都说是要禁用掉电脑多余的网卡&#xff0c;这方法我试了没有好&#xff0c;不晓得为啥子&#xff0c;之后在网上看&#xff0c;uniapp的devServer vue2的话对标的就是webpack4的devserver&#xff08;除了复杂的函数配置项&#xff09;&#xff0c…

持有NPDP证书是否可以进入高薪行业?

对于NPDP&#xff0c;一部分人考完PMP&#xff0c;想要继续提升自己的职场竞争力&#xff0c;一部分人是想直接考NPDP&#xff0c;但不确定它是否真的可以帮助到自己的职业发展&#xff0c;还处于一个犹豫踌躇的状态&#xff0c;那么我就来详细的介绍下NPDP考试的相关讯息&…

HTML5+CSS3+JS小实例:鼠标控制飞机的飞行方向

实例:鼠标控制飞机的飞行方向 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" conten…

【unity】关于技能释放shader.CreateGPUProgram造成卡顿,优化和定位方法。

关于优化方法&#xff0c;UWA这边有介绍 Unity移动端游戏性能优化简谱之 CPU耗时调优|单帧|动画|调用|unity|实例化_网易订阅 对此&#xff0c;我们可以将Shader通过ShaderVariantCollection收集要用到的变体并进行AssetBundle打包。在将该ShaderVariantCollection资源加载进内…

KubeSphere 在互联网医疗行业的应用实践

作者&#xff1a;宇轩辞白&#xff0c;运维研发工程师&#xff0c;目前专注于云原生、Kubernetes、容器、Linux、运维自动化等领域。 前言 2020 年我国互联网医疗企业迎来了“爆发元年”&#xff0c;越来越多居民在家隔离期间不方便去医院看诊&#xff0c;只好采取在线诊疗的手…

RK3568驱动指南|第五期-中断-

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

瑞芯微:基于RK3568的ocr识别

光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;是指对文本资料的图像文件进行分析识别处理&#xff0c;获取文字及版面信息的过程。亦即将图像中的文字进行识别&#xff0c;并以文本的形式返回。OCR的应用场景 卡片证件识别类&#xff1a;大陆、港澳…

如何通过AI视频智能分析技术,构建着装规范检测/工装穿戴检测系统?

众所周知&#xff0c;规范着装在很多场景中起着重要的作用。违规着装极易增加安全隐患&#xff0c;并且引发安全事故和质量问题&#xff0c;例如&#xff0c;在化工工厂中&#xff0c;倘若员工没有穿戴符合要求的特殊防护服和安全鞋&#xff0c;将有极大可能受到有害物质的侵害…

Doxygen在vs code配置

找到这个 就在这里面配置&#xff0c;如果要在原有的下面添加别忘了后面加个逗号&#xff0c;我在他前面加的所以我在上面加了个 //基础设置 “doxdocgen.c.triggerSequence”: “/", “doxdocgen.c.firstLine”: "/", “doxdocgen.c.commentPrefix”: &quo…

〔023〕Stable Diffusion 之 界面主题 篇

✨ 目录 🎈 系统内置主题🎈 kitchen Theme 主题🎈 Catppuccin Theme 主题🎈 Cozy Nest 主题🎈 系统内置主题 可以通过命令行修改主题,在 webui-user.bat 文件中 set COMMANDLINE_ARGS 参数后面添加 --theme dark 来设置深色主题当然,系统设置里面也自带了很多的主题…

C++ 异常处理学习笔记

一、使用情况 1、数组越界&#xff1a;包括数组索引小于0&#xff0c;或者大于数组长度 2、空指针 可以抛出(throw)各种类型的异常&#xff0c;catch的地方接收就可以

一款非常容易上手的报表工具,简单操作实现BI炫酷界面数据展示,驱动支持众多不同类型的数据库,可视化神器,免开源了

一款非常容易上手的报表工具&#xff0c;简单操作实现BI炫酷界面数据展示&#xff0c;驱动支持众多不同类型的数据库&#xff0c;可视化神器&#xff0c;免开源了。 在互联网数据大爆炸的这几年&#xff0c;各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的…

for forin forof forEach map区别

一、总结 相同点&#xff1a;都是串行遍历。不同点&#xff1a; 二、for of循环 设计目的&#xff1a;遍历所有数据结构的统一方法。原理&#xff1a;会调用数据结构的Symbol.iterator方法。 只要数据结构定义了Symbol.iterator属性&#xff0c;就能用for of遍历它的成员。…

短剧解说小程序搭建,短剧解说小程序源码

短剧解说小程序搭建&#xff0c;短剧解说小程序源码 可定制开发小程序&#xff0c;H5&#xff0c;APP等系统 有需要可定制可出源码&#xff0c;这个是啥你懂的(VVVVVVVVVVV)&#xff1a;二五四九七八九零五九 需要源码或搭建可看上面的数字信息 短剧解说小程序搭建 小程序使用…

自定义协议、序列化与反序列化

在编写TCP和UDP程序的时候&#xff0c;我们很自然的就使用了读取的函数对数据进行获取&#xff0c;对于UDP来说提供的是无连接的以数据报的形式进行传输&#xff0c;对于TCP来说是面向数据流的&#xff0c;在之前的程序中我们只是进行了读取的操作&#xff0c;但是并没有对读取…

修复Ripro主题扫码后空白或null或array的问题

WordPress Ripro主题使用的人比较多&#xff0c;绝大部分用的盗版主题&#xff0c;RiPro主题使用虎皮椒V3支付接口在使用弹窗支付的时候&#xff0c;微信或者支付宝扫码后出现null或array&#xff0c;会发生在ripro所有版本中。下面是修复方法&#xff1a; 打开ripro主题inc目…

安科瑞为工业能效提升行动计划提供EMS解决方案-安科瑞黄安南

摘要: 2022年6月29日工信部、发改委、财政部、生态环境部、国资委、市场监管总局六部门联合下发《关于印发工业能效提升行动计划的通知》&#xff08;工信部联节〔2022〕76号&#xff0c;以下简称《行动计划》&#xff09;&#xff0c;主要目的是为了提高工业领域能源利用效率&…

Hbase分布式集群部署

目录 一、环境说明 二、部署Hbase 2.1 解压Hbase 2.2 移动解压包 2.3 修改 hbase-env.sh文件 2.4 修改环境变量 2.5 修改hbase-site.xml文件 2.6 修改regionservers 文件 2.7 分发hbase 2.7.1 分发hbase包 2.7.2 分发环境配置 2.8 启动hbase服务 2.8.1 环境生效 …

Tungsten Fabric数据量过大问题处理初探

开源SDN系统Tungsten Fabric面临数据产生过多问题。 经排查&#xff0c;产生数据多出自analytics组件的Cassandra数据库()。很多分析数据会存储至Cassandra库&#xff0c;并持久化处理。 没有特殊调整的话&#xff0c;目录在 /var/lib/docker/volumes/analytics_database_an…

抗锯齿的线

抗锯齿的线 右下角的时候h是0,到顶部 h是1&#xff0c;然后中间y相距4个像素&#xff0c;那dy就是0.25 如果让h abs(fract(h - 0.5) - 0.5) 中间一行0.5&#xff0c;第一行 第三行都是0.25&#xff0c;两端都是0 根据插值来看 这里是 如果用h/dy 那么第一行以上&#xff0…