广告
返回顶部
首页 > 资讯 > 精选 >vue如何用组件传值实现观察者模式
  • 106
分享到

vue如何用组件传值实现观察者模式

2023-07-04 15:07:16 106人浏览 独家记忆
摘要

这篇文章主要介绍“Vue如何用组件传值实现观察者模式”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue如何用组件传值实现观察者模式”文章能帮助大家解决问题。第一步,我们先在main.js中注册一下

这篇文章主要介绍“Vue如何用组件传值实现观察者模式”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue如何用组件传值实现观察者模式”文章能帮助大家解决问题。

第一步,我们先在main.js中注册一下bus

Vue.prototype.$Bus = new Vue()

我们往vue的原型里注册了一个全局变量$Bus,他的值是vue的实例,也就是说,到现在为止,$Bus里边有了vue所有的属性和方法,这下就好操作了

第二步,我们开始发送消息

这就很符合观察者模式的发布订阅模式

我们在组件1中写如下代码:

<template>    <div>        <button @click="send">发送</button>    </div></template><script>export default {    methods: {        send () {            this.$Bus.$emit("send",'接收的信息')        }    }}</script>

点击按钮发送一条信息,这个按钮也就是充当发布者,我们用到了vue的$emit这个api,那么订阅者是什么呢?我不说你也应该想到了,对,就是他

第三步,在组件三中接收消息

<template>    <div>        {{message}}    </div></template><script>export default {    data () {        return {            message: ''        }    },    mounted () {        this.$Bus.$on('send', (msg) => {            this.message = msg        })    }}</script>

就是用$on这个属性充当接收者

从上可以看出,vue很多地方用到了观察者的思想,包括他的双向绑定也是如此

vue的机制

vue如何用组件传值实现观察者模式

从上图我们可以看出,vue是通过Object.defineProperty实现对数据的劫持,然后中间做了一个中转,最后渲染到vue层。

我们可以肯定的是,vue.js借鉴了观察者模式,但是我感觉还是有点区别的,观察者模式跟注重的是事件驱动,比如我买房这个动作,第一次和销售了解可能没有合适的房源,然后销售就会跟你说: ‘如果有合适的房源我们会第一时间通知你',当有新房源的时候他会给你打电话通知你,这一系列的根源是买房这个事件,他驱动了整套流程。而vue我们都知道是数据驱动,也就是只有data里的值发生改变的话,Object.defineProperty才会对他劫持,从而去更新dom,触发视图的更新。

那么有没有更符合观察者模式特征的?

当然是node.js的events事件了。

首先我们看看events的工作流程:

var events = require('events');// 创建 eventEmitter 对象var eventEmitter = new events.EventEmitter();// 创建事件处理程序var connectHandler = function connected() {   console.log('连接成功。');   // 触发 data_received 事件    eventEmitter.emit('data_received');}// 绑定 connection 事件处理程序eventEmitter.on('connection', connectHandler);// 使用匿名函数绑定 data_received 事件eventEmitter.on('data_received', function(){   console.log('数据接收成功。');});// 触发 connection 事件 eventEmitter.emit('connection');console.log("程序执行完毕。");

输出一下:

vue如何用组件传值实现观察者模式

这就完全符合观察者的工作模式,由emit发布,由on接收。所以说,node.js提供了很好的监听机制,还有他对整个事务的处理 。其支持了nodejs最特色的I/O模式,比如我们启动Http服务时会监听其 connect / close,http.request时会监听 data / end等。

还有没有类似的案例呢?

当然,js有一个事件监听者----addEventListener,也有点观察者的意思,具体用法我就不说了,想必大家用的都很熟悉。

其实只要你认真想一想,还是有很多地方有观察者的身影的,最简单的就是一个点击事件,是不是也有其意思,发布者是一个按钮,而接收者可以是表单,弹层等任何东西。

观察者模式存在的意义

首先我们说说他的优点:

1,观察者模式需要在观察者和被观察者之间建立一个耦合,他需要一个更加抽象化将二者联系在一起

2,观察者模式支持广播,也就是一对多的关系,这就让我们很容易想到一个技术,就是Socket,具体可以参考vue项目使用websocket技术

然鹅,他也是优缺点的:

1,创建订阅者本身要消耗一定的时间和内存

2,当订阅一个消息时,也许此消息并没有发生,但这个订阅者会始终存在内存中。

3,观察者模式弱化了对象之间的联系,这本是好事情,但如果过度使用,对象与对象之间的联系也会被隐藏的很深,会导致项目的难以跟踪维护和理解。

等会儿,还有一个模式叫发布订阅模式,很多人都以为他就是观察者模式(包括我),后来我上网查了一下,发现他们还是有区别的,我们可以说观察者模式和发布订阅模式很像,真的很像,但是本质还是有点区别的,最根本的就是调度中心不同。

举个例子,观察者模式更注重是目标和观察者是抽象类,比如天气预报,观察者A负责监听天气的变化,而B想得知天气的变化需要将自己注册到A中,而天气变化的时候A触发天气变化,调度B的接口更新变化。

而发布订阅模式是如何完成这个动作的呢?A想要感知天气变化,需要B这个调度中心,而B得到天气变化需要依赖C的触发。

为什么要使用Vue

Vue是一款友好的、多用途且高性能的javascript框架,使用vue可以创建可维护性和可测试性更强的代码库,Vue允许可以将一个网页分割成可复用的组件,每个组件都包含属于自己的htmlCSS、JavaScript,以用来渲染网页中相应的地方,所以越来越多的前端开发者使用vue。

关于“vue如何用组件传值实现观察者模式”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: vue如何用组件传值实现观察者模式

本文链接: https://www.lsjlt.com/news/346213.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue如何用组件传值实现观察者模式
    这篇文章主要介绍“vue如何用组件传值实现观察者模式”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue如何用组件传值实现观察者模式”文章能帮助大家解决问题。第一步,我们先在main.js中注册一下...
    99+
    2023-07-04
  • 怎么在vue中利用组件传值实现观察者模式
    怎么在vue中利用组件传值实现观察者模式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。第一步,我们先在main.js中注册一下busVue.prototype.$Bus&nbs...
    99+
    2023-06-15
  • 详解从vue的组件传值着手观察者模式
    目录观察者模式Vue传值第一步,我们先在main.js中注册一下bus第二步,我们开始发送消息第三步,在组件三中接收消息vue的机制观察者模式存在的意义观察者模式 首先,提到观察者模...
    99+
    2022-11-12
  • php如何实现观察者模式
    这篇文章主要介绍了php如何实现观察者模式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php实现观察者模式的方法:首先创建一个PHP示例文件;然后实现观察者向主题注册;最后...
    99+
    2023-06-14
  • 如何使用PHP实现观察者模式
    小编给大家分享一下如何使用PHP实现观察者模式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!观察者模式为您提供了避免组件之间紧密...
    99+
    2022-10-19
  • Javascript中如何实现观察者模式
    本篇文章为大家展示了Javascript中如何实现观察者模式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。基础知识观察者模式定义了对象间的一种一对多依赖关系,每当一...
    99+
    2022-10-19
  • 如何实现观察者模式及Spring中的事件编程模型
    这篇“如何实现观察者模式及Spring中的事件编程模型”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来...
    99+
    2022-10-19
  • javascript观察者模式如何实现自动刷新效果
    小编给大家分享一下javascript观察者模式如何实现自动刷新效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下/...
    99+
    2022-10-19
  • Vue中如何使用方法、计算属性或观察者模式
    这篇文章主要为大家展示了“Vue中如何使用方法、计算属性或观察者模式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中如何使用方法、计算属性或观察者模式”这...
    99+
    2022-10-19
  • vue如何实现父子组件传值
    小编给大家分享一下vue如何实现父子组件传值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!父子组件传值<!DOCTYPE&...
    99+
    2022-10-19
  • Vue祖孙组件如何实现传值
    目录先看基础$props$attrs$listeners祖传孙1. $props 链2. $attrs孙传祖$listeners总结先看基础 祖孙组件,也就是 3 层嵌套的组件。关于...
    99+
    2023-03-24
    Vue祖孙组件 Vue传值 Vue组件
  • Vue和React组件间如何实现传值
    这篇文章主要讲解了“Vue和React组件间如何实现传值”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue和React组件间如何实现传值”吧!组件间的传值方式组件的传值场景无外乎以下几种:...
    99+
    2023-07-04
  • Vue中如何实现父子组件传值
    Vue中如何实现父子组件传值,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。(一)传递数值1.子组件:Header.vue<templat...
    99+
    2022-10-19
  • Vue中父子组件如何实现传值
    目录前言一、将子组件引入父组件二、父组件如何传值给子组件三、子组件如何接收父组件传过来的值并使用(props)四、子组件如何传值给父组件($emit)五、父组件使用子组件传过来的值总...
    99+
    2023-01-28
    Vue父子组件 Vue组件传值 Vue父子组件传值
  • vue如何实现父组件向子组件进行传值
    这篇文章给大家分享的是有关vue如何实现父组件向子组件进行传值的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。父组件向子组件进行传值:在子组件绑定父的数据,子组件通过props接受参数。接下来我们通过一个例子,说明...
    99+
    2023-06-17
  • vue如何实现子组件向父组件进行传值
    这篇文章主要为大家展示了“vue如何实现子组件向父组件进行传值”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何实现子组件向父组件进行传值”这篇文章吧。子组件向父组件进行传值:父组件内设置...
    99+
    2023-06-17
  • vue如何利用store实现两个平行组件间的传值
    目录store实现两个平行组件间的传值方法:利用store.js传值平行组件传值的步骤1.布好局2.在ccc模板中用mounted函数接收完整代码如下 store实现两个平...
    99+
    2022-11-13
  • 如何用vue实现组件间参数传递
    这篇文章主要介绍“如何用vue实现组件间参数传递”,在日常操作中,相信很多人在如何用vue实现组件间参数传递问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用vue实现组件间参数传递”的疑惑有所帮助!接下来...
    99+
    2023-07-04
  • angularjs1.5中如何实现组件内用函数向外传值
    这篇文章主要介绍angularjs1.5中如何实现组件内用函数向外传值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!组件:.component('homeCityListCo...
    99+
    2022-10-19
  • VUE如何实现无状态的组件用函数式组件
    这篇文章将为大家详细讲解有关VUE如何实现无状态的组件用函数式组件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。无状态的组件用函数式组件对于一些纯展示,没有响应式数据,没有状态管理,也不用生命周期钩子函数...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作