返回顶部
首页 > 资讯 > 精选 >vue中不同情况下如何进行通讯
  • 829
分享到

vue中不同情况下如何进行通讯

2023-06-30 06:06:19 829人浏览 泡泡鱼
摘要

本篇内容介绍了“Vue中不同情况下如何进行通讯”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!同窗口(也就是同浏览器同一个页签内)同浏览器同页

本篇内容介绍了“Vue中不同情况下如何进行通讯”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

vue中不同情况下如何进行通讯

同窗口(也就是同浏览器同一个页签内)

同浏览器同页签内主要涉及的就是父子组件的传值。

vuex:状态管理器:适用一个项目里的任何组件,包容性极强

对于状态管理器的概念大家应该也不会陌生。

  • 多个组件可以共享一个或者多个状态值。不管组件的层级有多深都可以正常访问。所以这是一种官方直接支持的通讯方式。

  • 注意:对于小型单页应用而言,该选择并不是很建议,对于小型项目而言使用vuex反而会变得更加繁琐,就像是一个75斤150cm的人,穿了一件170cm110斤人的衣服一样,看着就很松松垮垮撑不起来。

provide / inject (写法基于v2.2.1及以上版本):适用N级组件,但是必须是单线传承的那种

这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在其上下游关系成立的时间里始终生效。

  • 就是相当于有一个N层楼的楼房,最顶层的是父级组件,每层楼之间会公用一个管子,这个管子就是provide。而管子在每层楼都有一个出口叫:inject

  • 注意:provideinject 绑定并不是可响应的。不过如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。

  • 让咱们来看看代码

// parent.vue// 此处忽略template模板的东西<script>export default {    name: 'parent',    // provide有两种写法    // 第一种    provide: {        a: 1,        b: 2    }    // 第二种    provide() {        return {            a: 1,            b: 2        }    }}</script>
// child.vue// 此处忽略template模板的东西<script>export default {    name: 'child',    // inject    // 第一种    inject: [ 'a', 'b' ]    // 第二种    inject: {        abc: { // 可以指定任意不与data,props冲突的变量名,然后指定是指向provide中的哪个变量            from: 'a',            default: 'sfd' // 如果默认值不是基本数据类型,那就得改用:default: () => {a:1,b:2}        },        b: {            default: '33'        }    }}</script>
props:适用相邻两组件的传值(父->子);$emit: 子 -> 父

正经的props/$emit可太常见了,都是用烂了的,就不用写示例代码了吧。

  • 只适用于相邻级别的父子组件之间传值

  • 对于多级组件的传值虽然也能用props传,但是吧,这样的话会让代码很难维护,极其不推荐。

eventBus: 地位与vuex差不多,适用任意组件,包容性极强

问题:

  • 不方便维护:如果在项目里用的多了,可能出现方法名冲突导致异常的问题,而且比较不方便排查。

  • 示例:

// utils/eventBus.jsimport Vue from 'vue'const EventBus = new Vue()export default EventBus
// main.js// 进行全局挂载import eventBus from '@/utils/eventBus'Vue.prototype.$eventBos = eventBus
// views/parent.vue<template>    <div>        <button @click="test">测试</button>    </div></template><script>export default {    data() {        return {}    },    methods: {        test() {            this.$eventBus.$emit('testBus', 'test')        }    }}
// views/child.vue<template>    <div>        {{ testContent }} <!-- test -->    </div></template><script>export default {    data() {        return {            testContent: ''        }    },    mounted() {        this.$eventBus.$on('test', e => this.testContent = e)    }}
$attrs / $listeners
  • $attrs

    • 从父组件传给自定义子组件的属性,如果没有 prop 接收会自动设置到子组件内部的最外层标签上,如果是 classstyle 的话,会合并最外层标签的 classstyle

    • 如果子组件中不想继承父组件传入的非 prop 属性,可以使用 inheritAttrs 禁用继承,然后通过 v-bind="$attrs" 把外部传入的 非 prop 属性设置给希望的标签上,但是这不会改变 classstyle

    • 官方解释

    • 当父组件向子组件传值,但是子组件并没有全部将传过来的值在props中声明时,在子组件里就可以通过$attrs来代理获取所有父组件传过来的值。

    • 示例:这是父组件

vue中不同情况下如何进行通讯

vue中不同情况下如何进行通讯

vue中不同情况下如何进行通讯

    • 此时,通过dom可以发现,所有没有声明的信息,全部出现在了子组件的根元素上。

    • 如果要让没有声明的信息不出现在子组件的根元素上,那就在子组件与data同级的位置加个属性:inheritAttrs: false;这样就不会未通过props接收的变量就不会出现在子组件的根元素上了

    • 至于怎么传递给子组件的子组件的子组件的子组件....等,那就需要给子组件的子组件依次都绑定:v-bind="$attrs"即可。

    • 注意这样只适用于传递数据。

    • 这是dom展示:

    • 这是子组件: 没有声明props

  • $listeners

    • 官方解释:包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。它可以通过 v-on="$listeners" 传入内部组件——在创建更高层次的组件时非常有用

    • 当父组件向子组件传递回调时,子组件可以通过$listeners代理所有回调。

    • 示例:这是父组件

vue中不同情况下如何进行通讯

    • 这是子组件

vue中不同情况下如何进行通讯

    • 这是执行展示:

      vue中不同情况下如何进行通讯

    • 同时可以发现子组件加上inheritAttrs:false之后根组件里的未声明props接受的变量消失了

      vue中不同情况下如何进行通讯

  • 最后:建议最好不要用这个玩意,虽然他们都可以相对便捷的将第一级组件的属性,方法回调传递给N级子组件中的任一级,但是之后进行bug定位,或者分析需求将会是一个比较大的挑战。

不同窗口(同浏览器不同页签内)

同浏览器的不同页签之间的通讯,大多数的场景是:项目里的增删改查都是打开的新页面,然后新增结束后就触发列表页重新获取列表。这种场景下有什么方法呢?

监听stroage事件
// 需要监听的页面mounted() {    window.addEventListener('storage', this.storageEvent);},beforeDestroy() {    window.removeEventListener()}methods: {    storageEvent(e) {        console.log("storage值发生变化后触发:", e)    }}
  • 切记:第一条:要记得将监听的事件在组件销毁之前解除监听。否则会给你惊”喜“

  • 切记:第二条:其中监听方法回调一定要在methods中定义,然后通过this进行引用,否则你在解除事件监听的时候将无效。

“vue中不同情况下如何进行通讯”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: vue中不同情况下如何进行通讯

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

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

猜你喜欢
  • vue中不同情况下如何进行通讯
    本篇内容介绍了“vue中不同情况下如何进行通讯”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!同窗口(也就是同浏览器同一个页签内)同浏览器同页...
    99+
    2023-06-30
  • MySQL中什么情况下进行sql优化
    这篇文章主要介绍MySQL中什么情况下进行sql优化,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!sql优化简介1、什么情况下进行sql优化性能低、执行时间太长、等待时间太长、连接查询、索引失效。2、sql语句执行过...
    99+
    2023-06-27
  • ASP、Shell、API、Apache:如何在不影响性能的情况下进行优化?
    随着Web应用程序的不断发展,越来越多的企业开始关注如何优化其性能。性能优化对于任何一个Web应用程序来说都是至关重要的,因为它能够提高用户的体验并且增加企业的收益。本文将探讨如何在不影响性能的情况下进行ASP、Shell、API和Apa...
    99+
    2023-09-13
    shell api apache
  • Python 索引:如何在实时情况下进行高效打包?
    Python索引:如何在实时情况下进行高效打包? 在Python中,索引是一种非常常见的操作,它可以帮助我们快速地查找和访问数据。在某些情况下,我们需要对大量的数据进行索引,例如,在实时情况下进行高效的数据打包。本文将介绍如何在Python...
    99+
    2023-10-29
    索引 实时 打包
  • 如何在不进行类型检查的情况下获取泛型函数中类型的大小?
    积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《如何在不进行类型检查的情况下获取泛...
    99+
    2024-04-05
  • 如何在Html5中与App进行通讯
    这期内容当中小编将会给大家带来有关如何在Html5中与App进行通讯,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。优点H5页面交由前端进行开发,页面模块之间分开开发和维护,有效减少App的开发周期H5页面...
    99+
    2023-06-09
  • Go、Laravel和Spring框架:如何在不同步阻塞线程的情况下完成同步?
    随着互联网的不断发展,开发人员们越来越需要使用高效的框架来提高开发效率。而对于Web应用程序开发而言,Go、Laravel和Spring框架都是非常受欢迎的选择。但是在使用这些框架的过程中,可能会出现线程同步的问题。本文将会介绍如何在不同步...
    99+
    2023-07-09
    laravel spring 同步
  • 在不使用ssr的情况下如何解决Vue单页面SEO问题
    这篇文章主要介绍在不使用ssr的情况下如何解决Vue单页面SEO问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!遇到的问题:近来在写个人博客的时候遇到了大家可能都会遇到的问题Vue...
    99+
    2024-04-02
  • 在Linux中不输入密码的情况下运行sudo命令
    本篇内容主要讲解“在Linux中不输入密码的情况下运行sudo命令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在Linux中不输入密码的情况下运行sudo命令”吧!假设你在只有自己使用的计算机...
    99+
    2023-06-16
  • 不使用他人jar包情况下优雅的进行dubbo调用详解
    目录1、正常dubbo调用流程2、如果想在不引用他人jar包的情况下如何调用呢?dubbo泛化调用-dubbo原生支持的优雅方法使用场景:如何使用:实现原理:3、总结1、正常dubb...
    99+
    2024-04-02
  • vue组件间如何进行通信
    本篇内容介绍了“vue组件间如何进行通信”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue是数据驱动视图更新的框架, 我们平时开发,都会把...
    99+
    2023-06-21
  • 如何在不下载数据的情况下从 Kaggle 导入数据?
    问题内容 我想将数据从kaggle导入到我的笔记本中,而不必下载它(所以如果我共享我的.ipynb,你只需要运行代码,它就会从互联网下载它),但我不知道是否可能以及要复制哪个链接。这是...
    99+
    2024-02-06
  • Spring 框架中如何与 PHP 进行同步通信?
    Spring 是一个流行的 Java 开发框架,它提供了许多强大的功能,包括依赖注入、面向切面编程和模板设计模式等。然而,有时候我们需要与其他编程语言进行通信,比如 PHP。那么,在 Spring 框架中如何实现与 PHP 的同步通信呢?...
    99+
    2023-10-29
    同步 linux spring
  • ORACLE不使用工具的情况下如何获取对象DDL
    这篇文章主要介绍了ORACLE不使用工具的情况下如何获取对象DDL,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 ...
    99+
    2024-04-02
  • ORACLE中在不删库的情况下如何直接修改数据库dbname
    这篇文章主要介绍ORACLE中在不删库的情况下如何直接修改数据库dbname,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 环境: Red 6.4 &n...
    99+
    2024-04-02
  • ASP、Linux、自然语言处理和Apache,如何在不影响业务的情况下进行升级和更新?
    在当今数字化时代,网站和应用程序已经成为现代企业的核心部分。由于不断变化的需求,这些系统必须随着时间不断地进行升级和更新。但是,这种升级和更新可能会对业务产生影响,因此需要采取一些措施来确保业务的正常运行。本文将介绍如何在不影响业务的情况下...
    99+
    2023-09-07
    linux 自然语言处理 apache
  • 如何使用apache的HttpClient进行http通讯
    这篇文章主要讲解了“如何使用apache的HttpClient进行http通讯”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用apache的HttpC...
    99+
    2024-04-02
  • 如何使C#框架的进程间同步通讯
    如何使C#框架的进程间同步通讯,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。threadmsg_demo.zip ~ 41KB  &...
    99+
    2023-06-17
  • vue如何在多个不同服务器下访问不同地址
    目录一、前言二、实现思路三、实践1. 获取axios请求地址2. 配置不同服务器的地址3. 打包时根据 process.env.NODE_ENV 判断不同环境4....
    99+
    2024-04-02
  • Bash 和 PHP:如何在同步响应中处理异常情况?
    在现代软件开发中,处理异常情况是非常重要的一环。无论是 Bash 还是 PHP,都提供了处理异常情况的机制。在本文中,我们将探讨如何在同步响应中处理异常情况,同时提供一些演示代码。 Bash 是一个在 Linux 和 macOS 等 Un...
    99+
    2023-06-28
    同步 响应 bash
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作