最新消息新闻/网站优化排名怎么做
一、通过props配置项传递数据(适用于父组件给子组件传递数据)
父组件向子组件传递数据:
父组件代码:在子组件的标签中传递数据
<template><div><h2>学校名称:{{schoolName}}</h2><!-- 方式一:props(父传子) 教师收到学校的名称 --><h1>教师组件:</h1><Teacher :schoolName="schoolName"></Teacher></div>
</template><script>
import Teacher from './Teacher.vue';
export default {name:'School',components:{Teacher},data() {return {schoolName:'尚硅谷',}}
}
</script><style>
</style>
子组件代码:定义props配置项去获取父组件在组件标签中传递的数据,props中的数据会存入组件实例对象中,使用数据时直接调用即可。
<template><div ><h2>所属学校名称:{{schoolName}}</h2></div>
</template><script>
export default {name:'Teacher',props:['schoolName']
}
</script><style>
</style>
子组件传递数据到父组件:
父组件:定义一个函数接收子组件传递的数据,并把函数放到子组件的标签中传递给子组件
<template><div><h2>教师名称:{{teacherName}}</h2><Teacher :getTeacher="getTeacher"></Teacher></div>
</template><script>
import Teacher from './Teacher.vue';
export default {name:'School',components:{Teacher},data() {return {teacherName:''}},methods: {getTeacher(teacherName){this.teacherName=teacherName}}
}
</script><style>
</style>
子组件:使用props配置项接受父组件传递的函数,定义点击事件,在事件中调用父组件的函数并把数据传递
<template><div ><button @click="sendName">点我传递教师名</button></div>
</template><script>
import StuOne from './StuOne.vue';
import StuTwo from './StuTwo.vue';
export default {name:'Teacher',props:['getTeacher'],data () {return {tName:'桥老师'}},methods:{sendName(){this.getTeacher(this.tName)}}
}
</script><style>
</style>
二、组件的自定义事件(适用于子组件向父组件传递数据)
自定义事件写法一:
父组件中:使用@或v-on指令为子组件绑定一个事件,并在父组件中定义一个事件被触发后的回调函数
<template><div><h2>教师年龄:{{teacherAge}}</h2><!-- 方式二 自定义事件(子传父) --><Teacher @getAge="gotAge"></Teacher></div>
</template><script>
import Teacher from './Teacher.vue';
export default {name:'School',components:{Teacher},data() {return {teacherAge:''}},methods: {gotAge(age){this.teacherAge=age}}
}
</script><style>
</style>
子组件中:使用$emit()去触发父组件为自己绑定的事件,并把数据携带给父组件的回调函数。($emit()在子组件的实例对象上,使用this获取) 在此案例中使用钩子函数触发事件。
<template><div ></div>
</template><script>
export default {name:'Teacher',data () {return {tAge:22}},mounted () {this.$emit('getAge',this.tAge)}
}
</script><style>
</style>
自定义事件写法二:
父组件中:为子组件设置ref属性,在钩子函数中使用this.$refs.属性名获取子组件实例对象,再使用$on()为子组件实例对象绑定事件并设置回调函数
<template><div><Teacher ref="tea"></Teacher></div>
</template><script>
import Teacher from './Teacher.vue';
export default {name:'School',components:{Teacher},data() {return {teacherAge:''}},methods: {gotAge(age){this.teacherAge=age}},mounted(){//回调函数可以使用箭头函数,也可以定义到methods中再使用this调用this.$refs.tea.$on('getAge',(age)=>{this.teacherAge=age})}
}
</script><style>
</style>
子组件中:此案例中定义了一个点击事件触发自定义事件。不可使用钩子函数触发自定义事件,因为Vue脚手架默认的编译顺序是先编译被父组件引入的子组件,这样会导致触发函数无法匹配到父组件定义的自定义事件。
<template><div ><button @click="sendAge">点我传递教师年龄</button></div>
</template><script>
export default {name:'Teacher',data () {return {tAge:22}},methods:{sendAge(){this.$emit('getAge',this.tAge)}},
}
</script><style>
</style>
当子组件废弃时,使用this.$off(事件名)即可解绑事件
三、全局事件总线(适用于任意组件间通信,最适合祖孙组件、兄弟组件之间)
原理:
全局事件总线,全局两个字,意思是在全局都能够访问到。并且能够绑定方法呢?
我们之前给子组件绑定自定义事件的时候,其本质就是为子组件的实例对象new VueComponent绑定上一个自定义事件。
在这个全局事件总线中,我们就不能再给每个组件的实例对象来绑定自定义事件了,而是要将自定义事件绑定到一个全部组件都能够访问的对象上。看到这张图你就有了答案:
我们将它放在vue原型上,那么全局事件总线就能够做到任意间组件通信。
在main.js中设置事件总线:
import Vue from 'vue'
import App from './App.vue'Vue.config.productionTip = falseconst vm=new Vue({render: h => h(App),//在Vue实例对象创建前在Vue原型创建全局事件总线beforeCreate(){//把$bus变成Vue实例对象vm,组件就可以通过this调用它Vue.prototype.$bus=this}
}).$mount('#app')console.log(Vue.prototype.$bus)
在获取数据的组件中:为传递数据的组件绑定事件,并定义回调函数。
<template><div class="stu"><h3>我是李四</h3><h3>张三的年龄是:{{Zage}}</h3></div>
</template><script>
export default {name:'StuTwo',data () {return {Zage:''}},mounted(){this.$bus.$on('getAge',(age)=>{this.Zage=age})}
}
</script><style>
</style>
在传递数据的组件中:触发事件并传递数据
<template><div class="stu"><h3>我是张三</h3><button @click="sendAge">把我的年龄告诉李四</button></div>
</template><script>
export default {name:'StuOne',data() {return {age:24}},methods: {sendAge(){this.$bus.$emit('getAge',this.age)}}}
</script><style></style>
四、消息的订阅以及发布
一种组件间通信的方式,适用于任意组件间通信。
使用步骤:
1.安装pubsub:npm i pubsub-js
2.引入: import pubsub from 'pubsub-js'
1.接收数据:A组件想接收数据,则在A组件中订阅消息,订阅的回调留在A组件自身。
methods(){ demo(message,data){......} } ...... mounted() { this.pid = pubsub.subscribe('xxx',this.demo) //订阅消息 }
2.提供数据:pubsub.publish('xxx',数据)
3.最好在beforeDestroy钩子中,用PubSub.unsubscribe(pid)去取消订阅。
注意: subscribe的回调函数中有两个参数,第一个参数是消息的名称,第二个参数才是发布消息所携带的数据
例:School组件获取Student组件的数据
School组件:在钩子函数中订阅消息
<template><div><h2>学生的姓名:{{studentName}}</h2></div></template><script>
import Teacher from './Teacher.vue';
import pubsub from 'pubsub-js'
export default {name:'School',data() {return {studentName:''}},mounted(){//订阅消息pubsub.subscribe('getName',(msg,name)=>{this.studentName=name})}
}
</script><style>
</style>
Student组件:发布消息
<template><div><button @click="sendName">把我的姓名告诉学校</button></div>
</template><script>
import pubshb from 'pubsub-js'
export default {name:'StuOne',data() {return {name:'张三'}},methods: {sendName(){//发布消息pubshb.publish('getName',this.name)}}}
</script><style></style>
五、使用VueX集中管理数据
概念:
专门在Vue中实现集中式状态(数据)管理的Vue插件,对Vue应用中多组件的共享数据进行管理(读/写),也是组件间通信方式之一,适用于任意组件间通信。
何时使用?
当多个组件共同使用同一状态(数据)时
当多个组件修改同一状态(数据)时
工作原理:
首先,VueX中有四个角色,分别是Actions对象、Mutations对象、State对象、Store对象,它们是用来干什么的呢?
State:存放共享数据
Mutations:对数据进行操作,开发者工具中可以看到Mutations的工作记录
Actions:负责编写代码逻辑,并调用Mutations去处理State中数据,可以连接接口、AJAX等
Store:管理者State、Mutations、Actions,在组件中使用this.$Store去操作他们
工作流程:
组件调用dispatch('Actions中函数名',参数)去找Actions,Actions帮组件执行指定函数,函数中通过commit('Mutations函数名',value)去找Mutations,Mutations去操作State中的数据,然后把操作后的数据渲染到页面上。当对数据操作的逻辑较为简单时,组件可以直接通过commit找Mutations去操作数据。
了解三层架构的小伙伴应该可以更快速的理解他们之间的关系,Actions类似于Service层,Mutations类似于Dao层。
生动理解:
再举一个形象的例子:把Vuex看做一个餐厅,Store就是餐厅的经理,Actions是餐厅服务员,Mutations是厨师,而State就是菜品,组件扮演顾客。
顾客来到餐厅吃饭,喊服务员过来点菜,服务员把点的菜通知厨师,厨师去做菜,菜被端到顾客的桌子上。那么也有一种情况,就是当这个顾客和这家餐厅很熟,那么顾客可以直接联系厨师去做菜。
代码实现:
注意!在下载vuex时最好指定vuex的版本(npm i vuex@3)。vue2使用vuex3版本,vue3使用vuex4以及以上版本。
根据vue官方推荐形式,首先在src中创建store文件夹,在文件夹下定义index.js,在index.js中创建Actions对象、Mutations对象、State对象并把他们封装到使用vuex.Store创建的store中并暴露。
import Vue from 'vue'
import vuex from 'vuex'Vue.use(vuex)const actions ={//actions中函数有两个参数,第一个参数是上下文参数,其中有state中属性,mutations中函数等//第二个参数才是传过来的数据changeName(context,value){context.commit('CHANGE_NAME',value)}
}const mutations={//mutations中函数也有两个参数,第一个是state的属性,第二个参数才是传过来的值CHANGE_NAME(state,value){state.firstStu=value}
}
const state={//定义一个变量存放姓名firstStu:'张三'
}export default new vuex.Store({actions,mutations,state
})
在main.js中引入store并使用
import Vue from 'vue'
import App from './App.vue'
import store from './store/index'Vue.config.productionTip = falseconst vm=new Vue({render: h => h(App),store,
}).$mount('#app')
创建Teacher组件读取store.state中的姓名,StudentOne组件负责修改姓名
<template><div ><h2>学生:{{ $store.state.firstStu}}!</h2><StuOne></StuOne></div>
</template><script>
import StuOne from './StuOne.vue';export default {name:'Teacher',components:{StuOne}
}
</script><style>
</style>
<template><div class="stu"><h3>我是{{$store.state.firstStu}}</h3><!-- 使用vuex技术修改姓名 --><input type="text" v-model="name"><button @click="changeName">改名按钮</button></div>
</template><script>
export default {name:'StuOne',data() {return {name:''}},methods: {changeName(){this.$store.dispatch('changeName',this.name)}}
}
</script><style>
</style>
由于使用store的state中的值时,代码过长($store.state....),vuex为我们提供了mapState以便我们简便的操作state中数据:
1.引入mapState:import {mapState} from 'vuex'
2.使用:
<template><div ><h2>学生:{{firstStu}}!</h2><StuOne></StuOne></div>
</template><script>
import StuOne from './StuOne.vue';
import {mapState} from 'vuex'export default {name:'Teacher',components:{StuOne,},computed: {...mapState({firstStu:'firstStu'})//简写形式://...mapState(['firstStu])}}
</script><style>
</style>
vuex还为我们提供了mapActions、mapMutations、mapGetters等方便我们操作函数
<template><div class="stu"><h3>我是{{firstStu}}</h3><!-- 使用vuex技术修改姓名 --><input type="text" v-model="name"><!--调用函数时就传值--><button @click="changeName(name)">改名按钮</button></div>
</template><script>
import {mapState,mapActions} from 'vuex'
export default {name:'StuOne',data() {return {name:'张三'}},methods: {...mapActions(['changeName'])},computed:{...mapState(['firstStu'])}}
</script><style>
</style>
注意!由于使用了mapActions去为我们调用store中actions的函数,所以需要我们在模板中使用函数时传值。
相关文章:

跟禹神VUE——组件间的通信方式(props配置项、组件间自定义事件、全局事件总线、消息订阅与发布、VUEX)
一、通过props配置项传递数据(适用于父组件给子组件传递数据) 父组件向子组件传递数据: 父组件代码:在子组件的标签中传递数据 <template><div><h2>学校名称:{{schoolName}}</h2><!-- 方…...

《2023年中国企业数字化转型发展白皮书》发布
导读 本报告主要采用市场调查、行业深度访谈、桌面研究等方法,并使用艾媒咨询旗下各大数据计算系统和相关计算模型。 对部分相关的公开信息进行筛选,通过对行业专家、相关企业与网民进行深度访谈,了解相关行业主要情况,获得相应…...

基于Python 简易实现接口测试自动化
目录 实现思路 统筹脚本 请求封装 日志封装 结果比对 结果邮件 用例获取及数据格式化 请求url转换 测试用例excel结构 测试报告 邮件接收结果 资料获取方法 实现思路 使用excel管理用例用例信息,requests模块发送http请求,实现了记录日志&…...

创建线程、线程的挂起与恢复、线程的优先级与终止线程
目录 一、创建线程 CreateThread函数: 下面是示例: 编辑 ThreadProc函数解释: DWORD的本质是 unsigned long PVOID的本质是 void* 二、线程的终止 1.WaitForSingleObject()函数: 示例如下: 2.ExitThread()函…...

[保研/考研机试] KY180 堆栈的使用 吉林大学复试上机题 C++实现
题目链接: 堆栈的使用_牛客题霸_牛客网 描述 堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,push 和 pop。其中 push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出。现在我们就来验证一下堆栈的使用。 输入描述: 对于…...

【AI理论学习】手把手推导扩散模型:Diffusion Models(DDPM)
手把手推导扩散模型:Diffusion Models(DDPM) DDPM理论回顾前置知识过程详解Forward ProcessReverse Process DDPM算法伪代码训练部分采样部分 总结一下 参考链接 在这篇博客文章中,我们将深入研究 去噪扩散概率模型(也称为 DDPM&…...

智能汽车 论坛收集
1.焉知汽车 焉知汽车 2.智能汽车俱乐部 智能汽车资源网 - 智能表面,智能内饰,新能源汽车,HMI,人车交互,智能车灯,车用材料 3.行业报告 发现报告 - 专业研报平台丨收录海量行业报告、券商研报丨免费分享…...

24届近5年南京航空航天大学自动化考研院校分析
今天给大家带来的是南京航空航天大学控制考研分析 满满干货~还不快快点赞收藏 一、南京航空航天大学 学校简介 南京航空航天大学创建于1952年10月,是新中国自己创办的第一批航空高等院校之一。1978年被国务院确定为全国重点大学;1981年经…...

Linux Day07
一、僵死进程 1.1僵死进程产生的原因 子进程先于父进程结束, 而父进程没有获取子进程退出码,释放子进程占用的资源,此时子进程将成为一个僵死进程。 在第一个框这里时父进程子进程都没有结束,显示其pid 父进程是2349,子进程是235…...
数字化管理,让MRO工业品更高效
MRO商品数字化是将MRO商品的采购、库存及记录过程进行数字化管理,以提高MRO商品的效率和可控性。MRO(Maintenance, Repair and Operations)一般用于维修、保养及日常运营工作中,包括五金工具、紧固件、精加工刀具、备品备件、切屑…...

layui中渲染table表格
页面布局 可直接根据文档要求去写 table 组件(这个不重要) <table lay-filter"SyDictTable" id"SyDictTable" lay-data"{id: SyDictTable}"></table>Js 重要的是去修改JS里面的东西,比如&#…...

2023-08-10LeetCode每日一题(下降路径最小和 II)
2023-08-10每日一题 一、题目编号 1289. 下降路径最小和 II二、题目链接 点击跳转到题目位置 三、题目描述 给你一个 n x n 整数矩阵 grid ,请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下降路径 定义为:从 grid 数组中的每一行选择一个数…...

网络基础2(HTTP,HTTPS,传输层协议详解)
再谈协议 在之前利用套接字进行通信的时候,我们都是利用 “字符串” 进行流式的发送接收,但是我们平常进行交流通信肯定不能只是简单的发送字符串。 比如我们用QQ进行聊天,我们不仅需要得到对方发送的消息,还要知道对方的昵称&…...

Java实现籍贯级联选择器
在工作中要求写一个籍贯的级联选择器,记录一下自己写这个级联选择器的过程,因为自己才刚开始工作,有很多地方都没有考虑的很清楚,希望各位大佬能给出建议。 一、需求 A:正常的23个省,籍贯由“省区/县/市”组成…...

每日一学——OSI参考模型
OSI参考模型(Open Systems Interconnection Reference Model)是国际标准化组织(ISO)制定的一个网络通信协议的概念框架。它将网络通信划分为七个层次,每个层次负责不同的功能和任务,从物理层到应用层依次为…...

虚幻5中Lumen提供哪些功能以及如何工作的
虚幻引擎 5 中的 Lumen 是一个完全动态的全局照明和反射系统。它可以在虚幻引擎 5 中使用,因此创作者无需自行设置。它是为下一代控制台和建筑可视化等高端可视化而设计的。那么它提供了哪些功能以及如何工作? 全局照明 当光离开光源时,它会…...

Linux C 语言 mosquitto 方式 MQTT 发布消息
1 说明 采用 mosquitto 库,实现对主题发布消息。 其中服务器有做限制,需要对应的 cilent id ,cafile 、certfile 、keyfile 等配置 2 开发环境 采用ubuntu 直接编译调试 安装mosquitto 库 sudo apt install libmosquitto-dev sudo apt-ge…...

利用NtDuplicateObject进行Dump
前言 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。(本文仅用于交流学习) 这是国外老哥2020年提出的一种蛮有意思的思路。 我们先来看看大致的思路是…...

【快应用】list组件如何区分滑动的方向?
【关键词】 list组件、滑动方向、scroll 【问题背景】 有cp反馈list这个组件在使用的时候,不知道如何区分它是上滑还是下滑。 【问题分析】 list组件除了通用事件之外,还提供了scroll、scrollbottom、scrolltop、scrollend、scrolltouchup事件&#x…...

【深入了解pytorch】PyTorch扩展:如何使用PyTorch的扩展功能
【深入了解pytorch】PyTorch扩展:如何使用PyTorch的扩展功能 PyTorch扩展:展示如何使用PyTorch的扩展功能1. 自定义损失函数2. 自定义数据加载器3. 自定义优化器总结PyTorch扩展:展示如何使用PyTorch的扩展功能 PyTorch作为一个开源的深度学习框架,在研究和应用领域广受欢…...

Vue3——如何实现页面访问拦截
在现代的Web开发中,页面访问拦截是一个非常常见的需求。通过拦截页面访问,我们可以控制用户在访问特定页面之前需要满足的条件,比如登录状态、权限等。Vue是一个非常流行的JavaScript框架,它提供了许多强大的工具和功能࿰…...

nginx配置gzip
在 Nginx 中启用 Gzip 压缩可以大幅减少传输内容的大小,从而加快网页加载速度。 打开 Nginx 的配置文件,通常是 /etc/nginx/nginx.conf 或者 /etc/nginx/conf.d/default.conf。找到 http 配置块,在其中添加以下代码来开启 Gzip 压缩ÿ…...

ExtJS教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 Ext JS是一个流行的JavaScript框架,它为使用跨浏览器功能构建Web应用程序提供了丰富的UI。 Ext JS基本上用于创建桌面应用程序它支持所有现代浏览器,如IE6 ,FF,Chrome,safari 6 等。Ext JS基于MVC / MVVM架构…...

【el-upload】批量上传图片时在before-upload中添加弹窗判断时的踩坑记录
一、初始代码 1. 初始使用组件代码片段 <!-- 上传 --> <DialogUploadFile ref"uploadFile" success"refresh" />// 上传 const uploadHandle () > {if (selections.value.length ! 1) {onceMessage.warning(请选择一条数据操作)return}u…...

【Java基础】- JVM之Dump文件详解
Java基础 - JVM之Dump文件详解 文章目录 Java基础 - JVM之Dump文件详解一、什么是Dump三、为什么需要Dump分析思路 四、Dump记录哪些内容4.1 Java dump 文件的格式和内容段格式行格式 4.2 常用分类heap dump和thread dumpheap dumpthread dump 五、如何生产Dump文件5.1 获取hea…...

基于Vue+wangeditor实现富文本编辑
目录 前言分析实现具体解决的问题有具体代码实现如下效果图总结前言 一个网站需要富文本编辑器功能的原因有很多,以下是一些常见的原因: 方便用户编辑内容:富文本编辑器提供了类似于Office Word的编辑功能,使得那些不太懂HTML的用户也能够方便地编辑网站内容。提高用户体验…...

深入理解 Spring 中的 @RequestBody 和 @ResponseBody 注解及其区别
引言 在现代的 Web 开发中,处理 HTTP 请求和响应是不可或缺的任务。Spring Framework 提供了丰富的功能来简化这些任务,并使开发人员能够更专注于业务逻辑。在本文中,我们将深入探讨 Spring 中的 RequestBody 和 ResponseBody 注解࿰…...

【论文阅读】EULER:通过可扩展时间链接预测检测网络横向移动(NDSS-2022)
作者:乔治华盛顿大学-Isaiah J. King、H. Howie Huang 引用:King I J, Huang H H. Euler: Detecting Network Lateral Movement via Scalable Temporal Graph Link Prediction [C]. Proceedings 2022 Network and Distributed System Security Symposium…...

手动创建一个DOCKER镜像
1. 我们先使用C语言写一个hello-world程序 vim hello.c # include <stdio.h>int main() {print("hello docker\n"); } 2. 将hello.c文件编译成二进制文件, 需要安装工具 yum install gcc yum install glibc-static 开始编译 gcc -static hello.c -o hello 编译…...

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--搭建Vue 前端工程[一]
文章目录 SSM--搭建Vue 前端工程--项目基础界面实现功能01-搭建Vue 前端工程需求分析/图解代码实现搭建Vue 前端工程下载node.js LTS 并安装: node.js 的npm创建Vue 项目使用idea 打开ssm_vue 项目, 并配置项目启动 Vue3 项目目录结构梳理Vue3 项目结构介绍 配置Vue 服务端口El…...