首页 > 其他分享 >Vue.js 消息订阅与发布

Vue.js 消息订阅与发布

时间:2023-03-20 17:44:07浏览次数:56  
标签:订阅 School Vue name js data hello pubsub

视频

npm i pubsub-js

该技术在vue中被事件总线完全替代

components

School.vue

<template>
	<div class="school">
		<h2>学校名称:{{name}}</h2>
		<h2>学校地址:{{address}}</h2>
	</div>
</template>

<script>
	import pubsub from 'pubsub-js'
	export default {
		name:'School',
		data() {
			return {
				name:'尚硅谷',
				address:'北京',
			}
		},
		mounted() {
			// console.log('School',this)
			/* this.$bus.$on('hello',(data)=>{
				console.log('我是School组件,收到了数据',data)
			}) */
			this.pubId = pubsub.subscribe('hello',(msgName,data)=>{
				console.log(this)
				// console.log('有人发布了hello消息,hello消息的回调执行了',msgName,data)
			})
		},
		beforeDestroy() {
			// this.$bus.$off('hello')
			pubsub.unsubscribe(this.pubId)
		},
	}
</script>

<style scoped>
	.school{
		background-color: skyblue;
		padding: 5px;
	}
</style>

Student.vue

<template>
	<div class="student">
		<h2>学生姓名:{{name}}</h2>
		<h2>学生性别:{{sex}}</h2>
		<button @click="sendStudentName">把学生名给School组件</button>
	</div>
</template>

<script>
	import pubsub from 'pubsub-js'
	export default {
		name:'Student',
		data() {
			return {
				name:'张三',
				sex:'男',
			}
		},
		mounted() {
			// console.log('Student',this.x)
		},
		methods: {
			sendStudentName(){
				// this.$bus.$emit('hello',this.name)
				pubsub.publish('hello',666)
			}
		},
	}
</script>

<style lang="less" scoped>
	.student{
		background-color: pink;
		padding: 5px;
		margin-top: 30px;
	}
</style>

App.vue

<template>
	<div class="app">
		<h1>{{msg}}</h1>
		<School/>
		<Student/>
	</div>
</template>

<script>
	import Student from './components/Student'
	import School from './components/School'

	export default {
		name:'App',
		components:{School,Student},
		data() {
			return {
				msg:'你好啊!',
			}
		}
	}
</script>

<style scoped>
	.app{
		background-color: gray;
		padding: 5px;
	}
</style>

main.js

//引入Vue
import Vue from 'vue'
//引入App
import App from './App.vue'
//关闭Vue的生产提示
Vue.config.productionTip = false

//创建vm
new Vue({
	el:'#app',
	render: h => h(App),
})

标签:订阅,School,Vue,name,js,data,hello,pubsub
From: https://www.cnblogs.com/chuixulvcao/p/17237128.html

相关文章

  • 初始JSON和JSON的3种形式以及常用方法
    初始JSONJSON全称是JavaScriptObjectNotation为什么需要JSONJSON有3种形式,每种形式的写法都和JS中的数据类型很像,可以很轻松和JS中的数据类型互相转换JS->JSO......
  • package.json 文档
    Description这份文档是您所需要了解的关于软件包中所需要的内容的全部内容。它必须是JSON,而不仅仅是JavaScript字面量。本文档中描述的许多行为都受到config中描述的配置......
  • vue的从0到1搭建 p2
    2、父子组件1)在components目录下新建sub文件夹,用于存放一下可以复用的子组件。比如新建一个Confirm.vue组件  (2)在父组件中引入子组件引入:importConfirmfro......
  • 使用npm发布vue插件或组件库
    1.先行再npm官网注册一个自己的npm账号;https://www.npmjs.com/2.准备插件或组件库:1)新建一个文件夹package作为写组件的地方2)package文件夹内使用npminit命令初始化包,获......
  • FastJson序列化后Date日期类型变成时间戳
    日志执行结果:以上可以看到productionDate通过FastJson序列化后变成时间戳了解决方式一:日期属性字段上添加@JSONField注解@JSONField(format="yyyy-MM-dd")priva......
  • React基础 - JSX
    //导入React、React-DOM//React负责创建React元素-虚拟DOM//ReactDOM负责渲染React元素//JSX-插值表达式//表达式//1.变量//2.基本数据类型:string、num......
  • 视频直播源码,js控制滚动条位置
    视频直播源码,js控制滚动条位置今天遇到一个问题,scrollTop定位滚动条位置时不生效,查找问题发现在给元素设置滚动属性后,直接设置了该元素滚动条的位置,导致该元素没有子元素......
  • JS中对象解构时指定默认值
    待解构字段为原始值正常情况下constobj={a:1,b:2};const{a,b}=obj;console.log(a,b);//12当被解构字段缺失时constobj={a:1,};const{a,b}=obj......
  • js直接操作数据库会怎么样
        这几天刷脉脉的时候看到一个话题初看觉得可笑,再看陷入沉思,最后还是决定花点时间想清楚,写下来。 确实没见人这么干过,为什么呢?技术限制被技术限制了?据我......
  • js根据起始日期加间隔天数计算出结束日期
    getNewDay(dateTemp,days){dateTemp=dateTemp.split("-");//转换为MM-DD-YYYY格式varnDate=newDate(dateTemp[1]+"-"+dateTemp[2]+......