当前位置: 首页 > news >正文

Vue2 消息订阅与发布

1.pubsub-js 第三方库实现

实现任何框架的消息订阅发布

npm i pubsub-js

<template><div class="student"><h2>展示学生的名称:{{ name }}</h2><h2>展示学生的性别:{{ sex }}</h2></div>
</template><script>
import pubsub from "pubsub-js";export default {name: "MyStudentt",data() {//这里存放数据return {name: "我是一个人",sex: 12,};},mounted() {// console.log(this.$refs.school1.__proto__===this.$refs.school2.__proto__);//true//   this.$bus.$on("show", (data)=>{//     console.log('事件总线收到了数据',data); 两个都生效//     this.name = data;//   });//  this.$bus.$on("show", (data)=>{//     console.log('事件总线收到了数据1',data);//     this.sex = data;//   });//订阅一个消息 show 是一个主题const pubId =  pubsub.subscribe("show", (msg, data) => {//消费者console.log("有人发布了消息,show消息回调成功", data);this.name = data;});this.pubId = pubId;//   pubsub.subscribe('show',(msg,data)=>{//消费者//   console.log('有人发布了消息,show消息回调成功',data);//   this.sex = data;// })},beforeDestroy() {// this.$bus.$off("show");pubsub.unsubscribe(this.pubId);},
};
</script><style scoped>
.student {background-color: green;padding: 5px;margin-top: 30px;
}
</style>
<template><div class="school"><h2 >展示学校的名称:{{name}}</h2><h2>展示学校的地址:{{ address }}</h2><button @click="show">传入事件总线数据</button></div>
</template><script>import pubsub from 'pubsub-js';export default {name: "MySchool",data() {//这里存放数据return {name: "辽工",address: "锦州",};},methods:{show(){// this.$bus.$emit('show',this.name);pubsub.publish('show',this.name);}}};
</script>
<style scoped>.school{background-color: red;padding: 5px;margin-top: 30px;}</style>
<template><div class="app"><h1>{{ msg }}</h1><Student ref="student"/><MySchool ref="school"/></div>
</template><script>
//引入School组件 随便起名字
import Student from "./components/Student.vue";
import MySchool from "./components/School.vue"; export default {name: "App",components: {Student,MySchool,},data() {return {msg: "你好啊!",};},mounted(){}
};
</script><style scoped>
.app {background-color: gray;padding: 5px;
}
</style>

2.$nextTick

<template><divid="container"@mouseover="handleMouseOver"@mouseleave="handleMouseLeave"><div id="d"><input type="checkbox" v-model="todo.done" /><span @click="info" v-show="!todo.showUpdate">{{ todo.title }}</span><!-- v-inputfocus="todo.showUpdate" --><inputtype="text"ref="updateInput"v-model="updateTitle"@keyup.enter="submitUpdate"@blur="cancelUpdate"v-show="todo.showUpdate"/></div><div><button class="btn update" v-show="showDelete" @click="updateTodo">修改</button><button class="btn" v-show="showDelete" @click="deleteTodo">删除</button></div></div>
</template><script>
import pubsub from "pubsub-js";export default {name: "TodoItem",data() {return {todo: this.todoObj,updateTitle: "",showDelete: false,};},methods: {//todo.hasOwnProperty这个属性是否有api  removeFocus() {//  this.$refs.updateInput.blur();},info() {console.log(this.todo);},handleMouseOver() {this.showDelete = true;},handleMouseLeave() {this.showDelete = false;},deleteTodo() {//  let a = this.$bus.$emit('removeTodo',this.todoObj.id)//  console.log(a===this.$bus);//a === vmif (confirm("你确定要删除吗?")) {pubsub.publish("removeTodo", this.todoObj.id);}},updateTodo() {if (this.todo.showUpdate) {this.todo.showUpdate = false;} else {this.updateTitle = this.todo.title;// this.$bus.$emit("updateTodoInputShow", this.todoObj.id, true);this.todo.showUpdate = true;//vue 提供api 在下次dom节点更新完毕后执行的回调this.$nextTick(function(){this.$refs.updateInput.focus();// console.log(this.$refs.updateInput);});}//vue 是等方法结束以后才回去解析模板, input框 focus 在display状态是不会聚焦的},submitUpdate() {if (confirm("你确定要保存吗?")) {if(this.updateTitle.trim()===''){alert('输入不能为空')return;}this.$bus.$emit("updateTodo", this.todo.id, this.updateTitle);}this.todo.showUpdate = false;},cancelUpdate() {this.todo.showUpdate = false;},},props: {todoObj: {//传入的若是引用对象 则里面修改了,外面同样生效type: Object,required: true,},},directives: {// inputfocus(e,v){//   if (v) {//       e.focus();//     }// }// inputfocus: {//   inserted(element, value) {//     if (value) {//       element.focus();//     }//   },//   update(element, value) {//     if (value) {//       element.focus();//     }//   },// },},
};
</script><style scoped>
#container:hover {background-color: #a09a9a;
}#container {display: flex;justify-content: space-between; /*  水平居左 */align-items: center; /* 垂直居中 */width: 500px;height: 30px;border: 0.1px solid #ccc;border-radius: 2px;padding-left: 10px;padding-top: 5px;padding-bottom: 5px;
}#container * {padding: 5px;
}.btn {width: 50px;height: 28px;color: white;background-color: #eb1212;border: 1px solid #ccc;border-radius: 5px;padding: 5px;margin-right: 15px;cursor: pointer; /* 鼠标悬停时显示手型光标 */transition: background-color 0.3s ease; /* 平滑过渡 */
}
.btn:hover {background-color: #d10d0d; /* 鼠标悬停时颜色变化 */
}.btn:active {background-color: #a00; /* 按下时颜色变化 */transform: translateY(2px); /* 按下时按钮下移效果 */
}.update {background-color: #1233eb;margin-right: 5px;
}
.update:hover {background-color: #4e70dc; /* 鼠标悬停时颜色变化 */
}
.update:active {background-color: rgb(71, 0, 170); /* 按下时颜色变化 */transform: translateY(2px); /* 按下时按钮下移效果 */
}
</style>

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • java中List列表转成子父集列表
  • 一口气把halcon的所有运算符说清楚
  • python爬虫滑块验证及各种加密函数(基于ddddocr进行的一层封装)
  • 什么是NLP实体识别?
  • 群晖NAS本地搭建可远程交互的大型语言模型LLM聊天机器人
  • Redis 列表类型的常用命令总结
  • WebService基础学习
  • SQL每日一练-0814
  • Unity新输入系统结构概览
  • telegraf、influxdb、grafana安装配置
  • Android的Service和Thread的区别
  • 将pytorch配置到jupyter里面(个人踩坑向)
  • HarmonyOS开发案例:创建全局自定义组件复用池-BuilderNode
  • 网鼎杯-2018-Web-Unfinish
  • python从入门到精通:函数
  • 网络传输文件的问题
  • $translatePartialLoader加载失败及解决方式
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【5+】跨webview多页面 触发事件(二)
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • gitlab-ci配置详解(一)
  • java8 Stream Pipelines 浅析
  • Java小白进阶笔记(3)-初级面向对象
  • Java新版本的开发已正式进入轨道,版本号18.3
  • PHP变量
  • React-Native - 收藏集 - 掘金
  • Tornado学习笔记(1)
  • Vue2 SSR 的优化之旅
  • Windows Containers 大冒险: 容器网络
  • 初识MongoDB分片
  • 动态规划入门(以爬楼梯为例)
  • 给Prometheus造假数据的方法
  • 京东美团研发面经
  • 微信小程序实战练习(仿五洲到家微信版)
  • 为视图添加丝滑的水波纹
  • Java性能优化之JVM GC(垃圾回收机制)
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​520就是要宠粉,你的心头书我买单
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • "无招胜有招"nbsp;史上最全的互…
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $().each和$.each的区别
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (LeetCode C++)盛最多水的容器
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (搬运以学习)flask 上下文的实现
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (算法)Travel Information Center
  • (循环依赖问题)学习spring的第九天
  • (一)为什么要选择C++
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Mysql的优化设置
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • .Net 6.0--通用帮助类--FileHelper