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,一经查实,立即删除!

相关文章

基于形态学滤波的心电信号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;…

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…

探索减轻 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小模型等。 此…

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;…

5.29高通技术分享抢先看 | 2024高通边缘智能创新应用大赛公开课

火力全开&#xff01;2024高通边缘智能创新应用大赛首期公开课将在5月29日晚上8点炫酷启动&#xff01; 届时&#xff0c;来自大赛主办方高通技术公司的产品市场总监李骏捷和高级资深工程师李万俊将于云端聚首&#xff0c;带来一场关于边缘智能的前沿技术对话。 各位参赛者及…

预防侵权知识丨什么是图形商标?怎么用产品图片进行图形商标查询检索?

图形商标查询检索是跨境电商预防侵权中重要的一环&#xff0c;但是有很多卖家对图形商标不太了解&#xff0c;也不知道怎么进行图形商标的查询检索。所以&#xff0c;我们一起来看下。 一、什么是图形商标 图形商标是商标的一种&#xff0c;指的是由几何图形或其它事物图案构…

30秒学会一个ChatGpt-4o小技巧 --- 照片漫画化

文章目录 选择照片修改图片 选择照片 先选择自己的一张照片 当然首先你得能够访问ChatGpt-4o, 图片生成能力只有ChatGpt-4才有 所以我们先登录到 国内能够使用的ChatGpt网站: 我要超级GPT 然后把图片上传&#xff0c;再写提示词&#xff1a;请帮我把这种照片按照日系动漫风…

IT 行业的现状剖析与未来展望:商业与技术的交织

今日&#xff0c;我无意间看到 CSDN 的创作话题&#xff1a;“我眼中的 IT 行业现状与未来趋势”&#xff0c;这引发了我对 IT 行业的深入思考。以下是我的一些个人见解&#xff0c;希望能得到大家的指正和交流&#xff0c;共同进步。 IT 行业的现状与未来趋势&#xff0c;这个…

821. 字符的最短距离 - 力扣

1. 题目 给你一个字符串 s 和一个字符 c &#xff0c;且 c 是 s 中出现过的字符。 返回一个整数数组 answer &#xff0c;其中 answer.length s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。 两个下标 i 和 j 之间的 距离 为 abs(i - j) &#xff0c…

el-transfer和el-tree进行结合搞一个树形穿梭框

由于业务需求需要在穿梭框里使用树形结构&#xff0c;但是本身element里并不支持&#xff0c;于是参考了别的大佬发的文章作为思路及后续自己新增了一些处理功能。 目录 1.拷贝代码放到自己的项目目录中 2.改造el-transfer的源码 3.修改tree-transfer-panel.vue文件 4.修改…

数据挖掘实战-基于余弦相似度的印度美食推荐系统

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【模版方法设计模式】

文章目录 模板方法设计模式模板方法的设计原则模板方法设计模式组成部分代码实现抽象类实现具体实现类执行 模板方法设计模式 模版方法设计模式&#xff08;Template Method Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一个操作中的算法骨架&#xff0c;而将一…

最最最重要的集群参数配置(上)no.7

我希望通过两期内容把这些重要的配置讲清楚。严格来说这些配置并不单单指Kafka服务器端的配置&#xff0c;其中既有Broker端参数&#xff0c;也有主题&#xff08;后面我用我们更熟悉的Topic表示&#xff09;级别的参数、JVM端参数和操作系统级别的参数。 需要你注意的是&…