vue2的方法与监听

vue2的方法

不可以使用箭头函数

<template>
<div><div>{{sum2()}}</div><button @click="add">add</button>
</div></template><script>
export default {data(){return{name:"张三",num:20,num2:30,}},methods:{sum2(){console.log('sum2')return this.num+ this.num2},/*** 注意,不应该使用箭头函数来定义 method 函数 (例如 plus: () => this.a++)。* 理由是箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例,this.a 将是 undefined。* 这时this其实是methods的this,但是methods没别任何对象调用所以他的this是undefined* 函数的this指向调用他的对象*/add:()=>{// this.num++// console.log(this.num)console.log(this)}},computed:{sum(){console.log('sum')return this.num+ this.num2}},watch:{num(){console.log('num')return this.num+ this.num2}},beforeCreate(){console.log('beforeCreate')}
}
</script><style lang="scss" scoped></style>
add:()=>{// this.num++// console.log(this.num)console.log(this)}

使用箭头函数时报错,打印一下发现箭头函数功能直接指向父级元素(这里是)methods,所以这里的this是methods的this因为未被调用所以是空的

注意,不应该使用箭头函数来定义 method 函数 (例如 plus: () => this.a++)。
* 理由是箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例,this.a 将是 undefined。
* 这时this其实是methods的this,但是methods没别任何对象调用所以他的this是undefined
* 函数的this指向调用他的对象

vue2监听

新建文件

修改路由

来到watch->index.vue

<template><div><h1>监听</h1><p>{{ num }}</p><button @click="num++">+</button><button @click="dog.name = '小柏'">+</button></div>
</template><script>
export default {data() {return {num: 1,dog: {name: '小狗',age: 1}}},watch: {/*** 1.简写,监听属性不依赖其他属性,修改值就会触发,一旦触发了被监听属性的set就会触发*/num(newV, oldV) {console.log('新值', newV, '旧值', oldV)},// dog(newV, oldV) {//     console.log('新值', newV, '旧值', oldV)// }dog: {deep: true,// 深度监听,监听对象中的属性变化handler(newV, oldV) {console.log('新值', newV, '旧值', oldV)},immediate: true//立即开始监听,页面第一次渲染时或者刷新时就会触发},'dog.age': {//这样直接监听对象的属性handler(newV, oldV) {console.log('新值', newV, '旧值', oldV)},immediate: true}}
}
</script>
<style scoped lang='scss'></style>

 num(newV, oldV) {console.log('新值', newV, '旧值', oldV)},

监听对象和对象属性

监听对象俩个方法选择其一,才会触发

immediate: true//立即开始监听,页面第一次渲染时或者刷新时就会触发
deep: true,// 深度监听,监听对象中的属性变化
   dog: {deep: true,// 深度监听,监听对象中的属性变化handler(newV, oldV) {console.log('新值', newV, '旧值', oldV)},immediate: true//立即开始监听,页面第一次渲染时或者刷新时就会触发},'dog.age': {//这样直接监听对象的属性handler(newV, oldV) {console.log('新值', newV, '旧值', oldV)},immediate: true}

vue2父传子

// 父传子搭配生命周期的理解

新建文件

切换路由

生命周期父子组件运行与销毁

parent.vue

引用使用子的文件

import Child from "./child";
//定义自己的名字是parent,引用子组件儿子的名字
name: 'parent',
components: { Child },
//在div内使用它
<Child/>

定义生命周期并对起销毁,给一个show属性,为true控制开关

return {show: true}beforeCreate() {console.log('父组件', 'beforeCreate')},created() {console.log('父组件', 'created')},beforeMount() {console.log('父组件', 'beforeMount')},mounted() {console.log('父组件', 'mounted')},beforeUpdate() {console.log('父组件', 'beforeUpdate')},updated() {console.log('父组件', 'updated')},beforeDestroy() {console.log('父组件', 'beforeDestroy')},destroyed() {console.log('父组件', 'destroyed')},

把父里面的值传个子,并使用按钮控制开关

 <Child v-if="show"/><button @click="show = !show">按钮</button>

parent.vue全部代码

<template><div><Child v-if="show"/><button @click="show = !show">按钮</button></div>
</template><script>
/*** 父传子,通过自定义属性传参,即props* 父组件将要传递的参数通过v-bind绑定到自组件上* :属性名="参数值"*/
import Child from "./child";
export default {name: 'parent',components: { Child },data() {return {show: true}},/*** 当父子组件嵌套时* 会先将父组件初始化,但不会进行挂载* 然后开始进行子组件的初始化以及挂载* 子组件挂载完毕时,才会挂载父组件* 销毁的时候,先销毁子组件,然后才会触发父组件的updated钩子*/beforeCreate() {console.log('父组件', 'beforeCreate')},created() {console.log('父组件', 'created')},beforeMount() {console.log('父组件', 'beforeMount')},mounted() {console.log('父组件', 'mounted')},beforeUpdate() {console.log('父组件', 'beforeUpdate')},updated() {console.log('父组件', 'updated')},beforeDestroy() {console.log('父组件', 'beforeDestroy')},destroyed() {console.log('父组件', 'destroyed')},methods: {},computed: {}
}
</script>
<style scoped lang='scss'></style>

子和父运行生命周期,并对起销毁

child.vue

定义一下自己的名字

 name: 'child',

在子组件里用生命周期,看看执行顺序

<template><div>子组件</div>
</template><script>
/*** 自组件通过props接受父组件传递的值* props中的属性被混入了当前的子组件中* 可以通过this直接访问到* 注意:子组件不允许修改父组件传递的值,否则会破坏vue的单向数据流*/
export default {name: 'child',data() {return {}},beforeCreate() {console.log('子组件beforeCreate')},created() {console.log('子组件created')},beforeMount() {console.log('子组件beforeMount')},mounted() {console.log('子组件mounted')},beforeUpdate() {console.log('子组件beforeUpdate')},updated() {console.log('子组件updated')},beforeDestroy() {console.log('子组件beforeDestroy')},destroyed() {console.log('子组件destroyed')},}
</script>
<style scoped lang='scss'></style>

show 初始值为 true,<Child> 组件在初始渲染时会被显示出来。

当点击show将flase隐藏,对子组件进行销毁

  • 当父子组件嵌套时
    • 会先将父组件初始化,但不会进行挂载
    • 然后开始进行子组件的初始化以及挂载
    • 子组件挂载完毕时,才会挂载父组件
    • 销毁的时候,先销毁子组件,然后才会触发父组件的updated钩子

注意:子组件不允许修改父组件传递的值,否则会破坏vue的单向数据流

<template><div>子组件<p>{{ age }}</p></div>
</template><script>
/*** 子组件通过props接受父组件传递的值* props中的属性被混入了当前的子组件中* 可以通过this直接访问到* 注意:子组件不允许修改父组件传递的值,否则会破坏vue的单向数据流*/
export default {/*** 1.简写* props: ['age'],*//*** 2.完整写法*/props: {age: {type: Number,//类型default: 18,//默认值required: true,//是否必须validator: (v) => { return true }//校验规则}},name: 'child',data() {return {}},beforeCreate() {console.log('子组件beforeCreate')},created() {console.log('子组件created')},beforeMount() {console.log('子组件beforeMount')},mounted() {console.log('子组件mounted')/*** $parent* 1.获取父组件的实例* 2.通过$parent可以访问到父组件的实例,从而访问到父组件中的数据和方法*/setTimeout(() => {console.log(this.$parent, '父组件')}, 100);},beforeUpdate() {console.log('子组件beforeUpdate')},updated() {console.log('子组件updated')},beforeDestroy() {console.log('子组件beforeDestroy')},destroyed() {console.log('子组件destroyed')},
}
</script>
<style scoped lang='scss'></style>

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

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

相关文章

Android 关于pm的用法

1 定义 Package Manager (pm)&#xff1a;用于安装、卸载、查询应用程序包信息等操作的命令行工具。 2 使用 2.1 安装应用程序 pm install /path/to/apkfile.apk2.2 卸载应用程序 pm install /path/to/apkfile.apk2.3 查询应用程序信息 pm list packages [-f] [-d] [-e] …

基于形态学滤波的心电信号ECG处理(MATLAB 2021B)

数学形态学简称形态学&#xff0c;在数学意义上&#xff0c;其基于集合理论、积分几何和网格代数&#xff0c;是一门严格建立在数学基础之上的学科&#xff0c;着重用来研究图像的几何结构和形状&#xff0c;因而称之为形态学。其基本思想是用结构元素对待分析图像进行“探测”…

机器人回调接口完善

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 免责声明&#xff1a;该工具仅供学习使用&#xff0c;禁止使用该工具从事违法活动&#xff0c;否则永久拉黑封禁账号&#xff01;&#xff01;&#xff01;本人不对任何工具的使用负责&am…

计算机类主题会议推荐之——ACAIB 2024

【北方民族大学40 周年校庆学术活动】 第四届自动化控制、算法与智能仿生学术会议(ACAIB 2024) 2024年6月7-9日 中国银川 往届均已见刊检索 EI、SCOPUS双检索 基本信息 会议官网&#xff1a;www.acaib.org 最终截稿时间&#xff1a;2024年6月3日晚23&#xff1a;…

网络编程——大端序小端序

网络编程——大端序小端序 大端序&#xff08;Big Endian&#xff09;和小端序&#xff08;Little Endian&#xff09;1. 大端序&#xff08;Big Endian&#xff09;2. 小端序&#xff08;Little Endian&#xff09;3. 举例说明4. 使用场景5. 转换 网络协议中的网络字节序原因具…

Mac 电脑给android手机传输文件提示 No android device found

在开发过程中&#xff0c;我们有时候会有在电脑和手机之间传输文件的需求。 Mac电脑给android手机传输文件并不是很方便。 Google 官方提供了一个软件叫Android File Transfer&#xff0c;这个软件免费且好用。 Android File Transfer下载地址 但是使用过程中会遇到一些问题…

白银现货价格对这两种形态形成突破 应当予以关注

在白银现货价格分析和交易中&#xff0c;突破这个行为一直是一个重要的、具有可分析性的市场动作。本文要讨论的&#xff0c;是基于价格形态之上的突破行为&#xff0c;下面我们就来看看。 中继形态的突破。白银现货价格波动中有中继形态有反转形态&#xff0c;中继形态的意思是…

Java代码——@Mock注入失效,注入对象始终为null

现象&#xff1a; 最近在使用Mock对象做单元测试&#xff0c;但是发现mock的对象始终为null. 代码如下&#xff1a; package com.****.cache;import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.Mock…

Linux-命令

添加权限方法及注意事项: 字母权限法很灵活,无论目录还是文件都可以随意添加删除超级权限 chmod us ... 添加SUID chmod gs ... 添加SGID chmod s ...同时添加SUID和SGID chmod -s ...同时删除SUID和SGID chmod ot ...添加Sticky chmod t ...同上 数字权限表示法添加/删除…

【软考高项】- 2024.05.25 第一批考情介绍

一、选择题 1、信息化融合包含内容&#xff0c;产品&#xff0c;产业&#xff0c;等。 2、it内部审计 3、排列活动的数据表现工具 4、费用现值法 5、数据安全法 6、专利&#xff0c;外观设计&#xff0c;实用新型 7、有好几个过程定义和作用。 8、甲乙两公司&#xff0…

Security OAuth2 SSO单点登录(一)

文章目录 学习链接单点登录cookiesession&token模式&前端无感token刷新&双token模式&黑名单auth-server引入依赖application.ymlAuthServerConfigSecurityConfigUserControllerlogin.html client1引入依赖application.yml配置文件SecurityConfigClient1Applica…

中央事件bus

中央事件bus的使用 使用场景&#xff1a;当需要传递给多个组件的时候例如父组件->子组件->孙组件&#xff0c;甚至还得传递到更深的组件的时候中央事件就起到了作用&#xff0c;不需要一直传递。bus其实就是一个发布订阅模式&#xff0c;利用vue的自定义事件机制 // 事…

探索减轻 AI 说服伤害的机制方法

随着生成式人工智能&#xff08;AI&#xff09;系统在各个领域的广泛应用&#xff0c;其说服能力也日益增强&#xff0c;引发了对 AI 说服可能带来伤害的担忧。AI 说服的伤害不仅来源于说服的结果&#xff0c;还包括说服过程中可能对个体或社会造成的不利影响。为了系统性地研究…

学习Uni-app开发小程序Day27

这一章学习了几个功能点&#xff0c;例如&#xff1a;try{}catch处理同步请求下载记录异常处理、onShareAppMessage分享好友和分享微信朋友圈、对分享页面传参进行特殊处理、共用分类列表页面实现我的下载和评分页面、使用mp-html富文本插件渲染公告详情页面 try{}catch处理同…

AI+低代码,打通企业大模型应用最后一公里!

一、AI的趋势与发展 一夜之间&#xff0c;微软的AI全宇宙似乎已成型。 5月22日凌晨&#xff0c;在一年一度的2024微软Build大会上&#xff0c;微软CEO萨蒂亚纳德拉一口气宣布了50多项AI能力更新&#xff0c;涵盖GPT-4o上云、自研Cobalt芯片、团队版Copilot、SOTA小模型等。 此…

网络通信过程的技术分析

网络通信过程的技术分析 目录 网络通信过程的技术分析 一、引言 二、网络通信基础 三、通信协议 四、数据传输过程 五、网络设备与通信 六、网络安全与通信 七、高级网络通信概念 八、结论 一、引言 网络通信是现代计算机网络中的核心活动&#xff0c;它涉及多个层面的…

Diffusion相关原理

Diffusion相关原理 1、数学&#xff1a;重参数化 &#xff08;用于高斯拟合求导&#xff09;变分推断原理 &#xff08;用于损失&#xff09; 2、生成模型系列1、AE自动编码器&#xff08;AutoEncoder&#xff09;2.VAE的模型架构模型原理数学原理AE和VAE对比 3、DDMP图像高斯加…

信息化项目必须进行验收测试吗?软件测试公司验收测试流程分享

信息化项目验收是指在软件开发完成之后&#xff0c;对其进行独立检查和确认&#xff0c;以确定它是否达到了预期的质量和功能需求。在进行验收之前&#xff0c;必须进行验收测试&#xff0c;这是非常重要的一步。 为什么要进行验收测试呢&#xff1f;好处可不少哦&#xff01;…

Flutter 中的 ExpansionTile 小部件:全面指南

Flutter 中的 ExpansionTile 小部件&#xff1a;全面指南 在 Flutter 应用中&#xff0c;ExpansionTile 是一个常用的折叠列表项&#xff0c;它允许用户点击标题来展开或折叠更多的内容。这个组件在实现可折叠列表、FAQ 部分或显示详情信息时非常有用。本文将详细介绍 Expansi…

张量视图(Tensor Views)

文章目录 前言1.torch.as_strided()2.torch.detach()3.torch.diagonal()4.torch.expand()5.torch.movedim()6.torch.narrow()7.torch.permute()8.torch.select()9.torch.squeeze()10.torch.transpose()11.torch.t()12.torch.real和torch.imag13.torch.unflatten()14.torch.unsq…