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

发布时间:2022-04-25 17:11:21 作者:iii
来源:亿速云 阅读:284

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

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

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

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

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

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

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

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

// 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可太常见了,都是用烂了的,就不用写示例代码了吧。

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

问题:

// utils/eventBus.js
import 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

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

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

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

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

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

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

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

监听stroage事件
// 需要监听的页面
mounted() {
    window.addEventListener('storage', this.storageEvent);
},
beforeDestroy() {
    window.removeEventListener()
}
methods: {
    storageEvent(e) {
        console.log("storage值发生变化后触发:", e)
    }
}

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

推荐阅读:
  1. vue如何实现通讯录功能
  2. vue2.0中怎么实现兄弟组件通讯

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vue

上一篇:php如何实现几秒后执行一个函数

下一篇:php如何检查汉字字符串有几个字符

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》