Hkc

vuePress-theme-reco Hkc    2025
Hkc Hkc

Choose mode

  • dark
  • auto
  • light
TimeLine
GitHub
author-avatar

Hkc

25

Article

13

Tag

TimeLine
GitHub
  • Vue

    • vue组件通信方式总结
    • Vue总结
  • Websocket

  • JS

  • CSS

  • Canvas

  • HTTP

  • GIT

  • SERVER

  • MORE

vue组件通信方式总结

vuePress-theme-reco Hkc    2025

vue组件通信方式总结

Hkc 2018-04-20 vue

# vue 组件通讯

# 父子组件通讯

父组件:
<scroll class="wrapper" :pullup="pullup" @pullup="more" ></scroll>

子组件:
  props:{
    pullup:{type: Boolean,
              default: true
      }
  }


this.$emit('pullup',“12”)
//子组件给父组件传值,通过自定义函数,父组件的中绑定的@pullup="more"直接触发more(value)方法,

# 兄弟组件通讯

兄弟组件通讯在不适用 vuex 的情况下可以使用 busEvent 的方式进行 首先创建 bus.js 内容如下:

 //兄弟组件通讯总线
import Vue from 'vue'
export default new Vue;

然后在需要通讯的组件中引入 bus.js

import Bus from '@/components/base/bus'

例子:组件 A--->组件 B 组件 a 中:

Bus.$emit('msg', '兄弟数据')

这里就是创建了一个 msg 的自定义事件 组件 B: 组件 B 去监听这个 msg 的自定义事件

Bus.$on('msg', msg => console.info(msg)  //兄弟数据)

# 使用 vuex 进行数据管理

首先我们看下 vuex 的文件结构以及他们是干什么的

actions.js                   //Action 类似于 mutation
getters.js                  //相当于vue中的computed计算属性
index.js                    //统一管理vuex中的 action mutation getter state 对外 export
mutation-types.js           //定义了所有一些常量,对整个 app 包含的 mutation有一个统一的规划
mutations.js                //定义了所有的mutation方法的实现
state.js     //vuex中的数据源,所有的数据都必须在state里

使用 vuex 的原因应该都是想对数据进行统一的管理,减少各种状态和数据在组件之间传递的繁琐。

# 1:state

const state = {
  keyword : ""
}
export default state

这里我们定义了一个 keyword 关键字,并把它的初始值设置为空

在 vue 组件中我们可以这样去取出这个值

 this.$store.state.keyword

# 2:getter 其实就是 vuex 中的计算属性可以对 state 的值进行相应的处理然后再取出。

# 3:mutation-types

使用常量替代 mutation 事件类型在各种 Flux 实现中是很常见的模式。这样可以使 linter 之类的工具发挥作用,同时把这些常量放在单独的文件中可以让你的代码合作者对整个 app 包含的 mutation 一目了然

export const SET_KEYWORD = 'SET_KEYWORD';//搜索关键字

# 4:mutation 定义了修改 state 中的值得方法

//这里只是接受传过来的keyword,将他赋值给state。
import {SET_KEYWORD} from './mutation-types';
const mutations = {
  [SET_KEYWORD](state, keyword) {
    state.keyword = keyword;
  }
};
export default mutations;

在 vue 组件中我们可以这样去提交这个值

 this.$store.commit("SET_KEYWORD", msg);

或者

this.\$store.commit({
  type: 'SET_KEYWORD',
  keyword: msg
})

# 5:index 部分代码

import Vue from 'vue';
import Vuex from 'vuex';
import getters from './getters';
import mutations from './mutations';
import actions from './action';
import state from './state';

Vue.use(Vuex);
export default new Vuex.Store({
  state,
  getters,
  actions,
  mutations,
})

最后:讲的比较通俗,如需更系统全面的文档,可查看(vuex 文档) https://vuex.vuejs.org/zh-cn/