首页 > 其他分享 >Vue学习笔记53--消息订阅与发布

Vue学习笔记53--消息订阅与发布

时间:2024-03-15 17:25:05浏览次数:12  
标签:订阅 Vue -- 53 js 消息 pubsub

消息订阅与发布

1.订阅消息(需要数据的人):消息名称 2.发布消息(提供数据的人):消息内容 注: 1.订阅名称和发布名称一致 2.需要数据的人--订阅消息;提供数据的人--发布消息

 

示例一: 第一步:安装支持库 安装第三方支持库:pubsub.js(退出项目运行后执行以下命令,安装库文件) npm i pubsub-js  第二步:引入 + 订阅 在需要数据的组件引入组件pubsub-js  import pubsub from 'pubsub-js';
<!-- 组件的结构 -->
<template>
  <div class="school">
    <h3>学校姓名:{{name}}</h3>
    <h3>学校地址:{{ address }}</h3>

  </div>
</template>

<!-- 组件交互相关的代码(数据、方法等) -->
<script>
// 引入消息订阅发布插件
import pubsub from 'pubsub-js';

export default ({
  // eslint-disable-next-line vue/multi-word-component-names
  name: 'School',
  data () {
    return {
      name: '高新一小',
      address: '西安/高新一小'
    }
  },
  methods: {
    demo (msgName, getdata) {
      console.log(this)
      console.log('School 发布了hello消息,hello消息的回调执行了==>', msgName, getdata)
    }
  },
  mounted () {
    /*     // 订阅消息
        // this.pubId = pubsub.subscribe('hello', function (msgName, getdata) {
        this.pubId = pubsub.subscribe('hello', (msgName, getdata) => {
          console.log(this)
          console.log('School 发布了hello消息,hello消息的回调执行了==>', msgName, getdata)
        }) */


    this.pubId = pubsub.subscribe('hello', this.demo)
  },
  beforeDestroy () {
    pubsub.unsubscribe(this.pubId)
  },
})
</script>

<!-- 组件的样式 scoped局部样式,否则多个vue组件中同名会导致样式覆盖(将使用最后一个引入的组件样式)-->
<style scoped>
.school {
  background-color: burlywood;
}
</style>

第三步:引入 + 发布

// 引入消息订阅发布插件 import pubsub from 'pubsub-js';
<!-- 组件的结构 -->
<template>
  <div class="student">
    <h3>学生姓名:{{name}}</h3>
    <h3>学生性别:{{ sex }}</h3>
    <button @click="sendStudentName">把学生姓名给School组件</button>
  </div>
</template>

<!-- 组件交互相关的代码(数据、方法等) -->
<script>
// 引入消息订阅发布插件
import pubsub from 'pubsub-js';

export default ({
  // eslint-disable-next-line vue/multi-word-component-names
  name: 'Student',
  data () {
    return {
      msg: 'Vue消息发布与订阅',
      name: '心仪',
      sex: '女',
    }
  },
  methods: {
    sendStudentName () {
      pubsub.publish('hello', this.msg)
    }
  },
  mounted () {

  }, 

})
</script>

<!-- 组件的默认样式 css写法 -->
<!-- <style scoped>
.demo {
  background-color: cadetblue;
}
</style> -->

<style lang="less" scoped>
.student {
  background-color: cadetblue;
  .myfontsize {
    font-size: 40px;
  }
}
</style>

main.js

// 引入Vue
import Vue from 'vue'
// 引入App
import App from './App.vue'
// 配置提示
Vue.config.productionTip = false

// console.log('Vue.prototype==>', Vue.prototype)
// console.log('VueComponent.prototype.__proto__==>', Vue.prototype)

new Vue({
  render: h => h(App),
}).$mount('#app')


/* 
消息订阅与发布
1.订阅消息(需要数据的人):消息名称
2.发布消息(提供数据的人):消息内容
注:
1.订阅名称和发布名称一致
2.需要数据的人--订阅消息;提供数据的人--发布消息

第三方支持库:pubsub.js
 */

App.vue

<template>
  <div class="app">
    <!-- <img src="./assets/logo.png"> -->
    <h2>{{msg}}</h2>
    <hr>
    学校组件:
    <School />
    <hr>
    学生组件:
    <Student />
  </div>
</template>

<script>
// 引入组件
import Student from './components/Student.vue';
import School from './components/School.vue';
export default {
  name: 'App',
  components: { Student, School },
  data () {
    return {
      msg: '消息订阅与发布'
    }
  },

}
</script>

<style scoped>
.app {
  background-color: rgb(178, 168, 168);
  padding: 15px;
}
</style>

  

标签:订阅,Vue,--,53,js,消息,pubsub
From: https://www.cnblogs.com/YYkun/p/18075622

相关文章

  • [vue3 配置] import 图片无法识别的问题
    vue3引入图片,路径没错,但无法识别importdefaultImagefrom'@/assets/column.jpg'Cannotfindmodule'@/assets/column.jpg'oritscorrespondingtypedeclarations.为啥报这个错误?typescript无法识别图片文件,需要在配置中增加声明新建image.d.ts文件/*eslint-disable......
  • ThreadLocal源码解析
    ThreadLocalpublicvoidset(Tvalue){Threadt=Thread.currentThread();ThreadLocalMapmap=getMap(t);if(map!=null)//map不为null,之前设置过情况map.set(this,value);elsecreateMap(t,value);}privatevoidset......
  • UVM -11 (练习)
    sequencer使用usersequencer类的创建classgpio_sequencerextendsuvm_sequencer#(gpio_transfer);`uvm_component_utils(gpio_sequencer)functionnew(stringname,uvm_componentparent);super,new(name,parent);endfunctionendclassvirtualsequencer......
  • 设计模式——抽象工厂实验
    抽象工厂实验实验场景:电子商务系统中创建的订单分为国内订单(DomesticOrder)和海外订单(OverseasOrder);国内订单使用人民币支付(RMBPayment),海外订单使用美元支付(USDPayment)。实验要求:设计使用抽象工厂模式来实现订单创建功能。实验内容:将订单工厂中的接口封装为order-api......
  • 图片水印处理
    publicstaticvoidmain(String[]args)throwsIOException{//读取图片文件信息Filefile=newFile("C:\Users\Administrator\Desktop\1.png");//将图片文件转为BufferedImage的对象BufferedImageimage=ImageIO.read(file);//注意:这里需要抛一个异常,要不然read()会报错......
  • win7下使用Aero2主题错误
    开发了一个gui工具,有同事在win7环境下发现界面无法加载出来。经过调试发现,在view初始化的过程中,提示PresentationFramework.Aero2无法加载,异常信息如下:{System.BadImageFormatException:Couldnotloadfileorassembly'PresentationFramework.Aero2,PublicKeyToken=31bf385......
  • java上传文件到FTP制定文件夹
    JAVA上传文件到FTP/***@ClassNameFTPLoad*@DescriptionTODO*@Authordell*@Date2024/3/1415:56*@Version1.0**/importcn.hutool.core.io.FileUtil;importcn.hutool.json.JSONObject;importcn.hutool.json.JSONUtil;importorg.apache.commons.net.......
  • 第一课——树状数组
    前缀和算法可以计算某一个区间的累记和,但是出现修改的时候,前缀和的效率便得不到保障。于是数状数组出现了。出现原因总结——需求从单纯的区间查询变为了单点修改+区间查询。树状数组本文不探讨树状数组的开发过程,这里先给出树状数组的结构:树状数组的设计非常巧妙,它让下标为......
  • 从公司的code Review 中提升编码能力
    1、对于只有一个ifelse并且简单赋值可以用三元表达式优化修改之前:优化后:对于不变的并且结构很长的这种对象或数组,可以放到一个ts文件,通过引入的方式,这样代码看起来会代码更简洁明了2、用map映射替换重复判断的ifelse修改之前:优化后:对于重复的ifelse判断,可......
  • 实名制的重要性-身份证实名认证接口-C#接口代码
    身份证实名制在现代社会中已经成为一项重要的制度,被广泛应用。对于消费者而言,身份证实名验证可以保障个人信息的安全,防止个人信息被盗用;对于企业而言,身份证实名验证也可以保障企业的安全,防止诈骗份子对企业利益造成损害。翔云身份证实名认证接口,实时联网,可快速、精准核验......