vue怎么实现不同组件间(非父子组件间的通信),一个变化,另一个实时变化的效果

 vue中,只有组件内的值,发生了变化,组件才会重新渲染,那我们怎么实现,两个不同组件,一个组件内的值发生变化,另一个组件也随之变化,比较常用的场景就是下面的例子了:

头部导航是一个单独的组件,侧边栏是一个组件,其余部分是内容区,想要的效果就是,当内容区的个人信息修改成功之后,希望头部右侧的个人信息(姓名和头像)也随着变化

分析:头部和内容区,不在同一个组件内,也不是父子关系

解决办法:通过vuex状态管理,实现组件间的通信问题

具体实现:

内容区每次保存成功的时候,更新store中之前存储的数据

this.axios.post(url, params)
        .then(res => {
          if (res.data.status === 200) {
            this.$Message.success(`${res.data.msg}`)
            this.$store.dispatch('userInfo', params)//更新store中的userInfo中的值
          } else {
            this.$Message.error(`${res.data.msg}`)
          }
        })

头部导航条:通过计算属性获取vuex中userInfo中的值

  computed:{
    user(){
      return this.$store.state.userInfo
    }
  },
<div style="float:right;">
          <Avatar v-if="!!user.user_headimg" :src="user.user_headimg" />
          <Dropdown trigger="click" style="margin-left: 20px;">
            <a href="javascript:void(0)" style="color:#fff;">
              {{user.user_realname}}
              <Icon type="md-arrow-dropdown" />
            </a>  
          </Dropdown>
</div>

此时,当内容区发生变化,头部导航条的信息也就会随着发生变化了

 

注意:不要直接复制我的代码,只是作为演示说明,最重要的是掌握逻辑思路

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3父子组件通信可以通过props和emit来实现。 1. 使用props:父组件可以通过props属性向子组件传递数据。在子组件,可以通过接收props属性来使用这些数据。在父组件,可以通过修改props属性的实现与子组件通信。 父组件示例: ```vue <template> <div> <child-component :message="parentMessage"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { parentMessage: 'Hello from parent component' }; } }; </script> ``` 子组件示例: ```vue <template> <div> <p>{{ message }}</p> </div> </template> <script> export default { props: { message: { type: String, required: true } } }; </script> ``` 2. 使用emit:子组件可以通过emit方法触发自定义事件,然后父组件可以通过监听这些事件来获取子组件传递的数据。 父组件示例: ```vue <template> <div> <child-component @child-event="handleChildEvent"></child-component> <p>{{ messageFromChild }}</p> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { messageFromChild: '' }; }, methods: { handleChildEvent(message) { this.messageFromChild = message; } } }; </script> ``` 子组件示例: ```vue <template> <div> <button @click="sendMessageToParent">Send Message to Parent</button> </div> </template> <script> export default { methods: { sendMessageToParent() { this.$emit('child-event', 'Hello from child component'); } } }; </script> ``` 这两种方式都可以实现父子组件通信,你可以根据具体的需求选择使用哪种方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值