vue 组件通信

1.父组件传子组件(props)
父组件v-bind(简写":")绑定 子组件通过props

// 父组件
<template>
    <div>
        <Aside :id="father_id" ></Aside>
    </div>
</template>
<script>
    import Aside from './Aside/Aside.vue'
    export default {
        name:'Main',
        data(){
            return {
          		father_id: '123'
        	}
        },
        components:{
            Aside
        }
    }
</script>

//子组件
<template>
    <div class="left">
        我是Aside 数据:{{id}}
    </div>
</template>
<script>
    export default {
        name:'Aside',
        props: [
            'id'
        ]
    }
</script>

2.子组件传父组件( e m i t ) 子 组 件 使 用 emit) 子组件使用 emit使emit触法 父组件v-on(简写"@")监听事件

// 父组件
<template>
    <div>
        <Aside @msg="message"></Aside>
    </div>
</template>
<script>
    import Aside from './Aside/Aside.vue'
    export default {
        name:'Main',
        },
        methods: {
            message(e){
                console.log(e);
            }
        },
        components:{
            Aside
        }
    }
</script>

// 子组件
<script>
    export default {
        name:'Aside',
        data(){
            return{
                msg: '我是msg'
            }
        },
        created() {
            this.$emit('msg',this.msg)
        }
    }
</script>

3.兄弟组件传值 ( o n 与 on与 onemit)
这个方法需要使用建立一个’桥‘

// connect.js  '桥'
import Vue from 'vue'
var connect = new Vue()
export default connect

// Footer 组件 emit触法
<template>
    <div>
        我是Footer
        <button @click="send">传值</button>
    </div>
</template>
<script>
    import Connect from './connect.js'
    export default {
        name: 'Footer',
        data(){
          return{
              FooterMsg:'FooterMsg'
          }
        },
        methods: {
            send(){
                Connect.$emit('FooterMsg',this.FooterMsg)
            }
        },
    }
</script>
// Main 兄弟组件 on提前监听
<template>
    <div>
        我是Main
        footerMsg:{{FooterMsg||'空'}}
    </div>
</template>

<script>
    import Connect from './connect.js'
    export default {
        name:'Main',
        data(){
            return {
                FooterMsg:''
        }
        },
        mounted() {
            Connect.$on('FooterMsg',(e)=>{
                    console.log(e)
                    this.FooterMsg = e
                })
        }
    }
</script>

4.vuex
vuex状态管理机制是响应式的,Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。vuex刷新后会初始化。

store // 仓库
state // 状态
getter // 获取state,可以过滤选择需要的state数据
mutation // 同步修改state 通过dispatch
action // 异步修改state 通过commit触法

第一步 声明store

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);
let store = new Vuex.Store({
    state:{
        count:"10"
    },
    getters:{
        // 参数列表state指的是state数据
        getCount(state){
            return state.count;
        }
    },
    actions:{// commit触法
        setCount({commit}, count){
            // 调用mutaions里面的方法
            commit("setCount", count);
        }
    },
    mutations:{ //dispatch触法
        setCount(state, count){
            state.count = count;//将传参设置给state的count
        }
    }
})
export default store

第二步导入

import Vue from 'vue'
import App from './App.vue'
import store from './components/store/store.js'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
    store
}).$mount('#app')

第三步使用

<template>
    <div>
        我是Main
        <button @click="Click1">获取count</button>
        <button @click="Click2">更改count为11</button>
        <button @click="Click3">更改count为110</button>
    </div>
</template>

<script>
    export default {
        name:'Main',
        methods: {
            Click1(){
                console.log(this.$store.getters.getCount)
            },
            Click2(){
                this.$store.dispatch('setCount','11');
            },
            Click3(){
                this.$store.commit('setCount','110');
            },
        },
    }
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值