使用vuex实现父组件调用子组件方法

曲线救国。

核心原理就是父子共用一个vuex对象,且看代码:

 

父组件parent.vue

<template>
    <div class="wrap">
        <form action="">
            <input type="text" v-model="searchParam.name">
            <input type="text" v-model="searchParam.id">
            <button @click="search"></button>
        </form>
        <child></child>
    </div>
</template>

<script>
    import store from '@/vuex';

    export default {
        name: 'parent',
        store,
        components: {
            'child': () => import('./child.vue'),
        },
        data () {
            return this.$store.state.parent;
        },
        methods: {
            search () {
                this.$store.dispatch('search');
            }
        }
    };
</script>

<style lang="less" scoped>

</style>

 

 

子组件 child.vue

<template>
    <ul v-if="list && list.length">
        <li class="river-item" v-for="item in list">{{item}}</li>
    </ul>
</template>

<script>

    export default {
        name: 'child',
        created () {
            this.$store.dispatch('getData'); 
        },
        data() {
            return this.$store.state.child;
        }
    };
</script>

<style lang="less" scoped>

</style>

 

 

vuex.js

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

Vue.use(Vuex);

export default new Vuex.Store({
    state: {
        parent: {
            searchParam: {
                name: '',
                id: ''
            }
        },
        child: {
            pageIndex: 1,
            pageTotal: 0
            list: []
        }
    },
    actions: {
        // 父组件的搜索方法
        search({commit, dispatch, state}) {
            // 重置子组件的列表
            state.child.pageIndex = 1;
            state.child.list = [];
            dispatch('getData');
        }
        // 子组件的获取数据方法
        getData ({commit, dispatch, state}) {
            fetch('http://test.com', {
                method: 'POST',
                // 使用父组件的参数(连传递props都省了 -_-!)
                body: state.parent.searchParam
            }).then(res => res.json()).then(data => {
                state.child.list = data;
            });
        }

    }
});

 

 

父组件和子组件的data及method都写到vuex里面去了,数据共享,这样父组件就可以调用vuex里面的action来修改子组件的data了!

转载于:https://www.cnblogs.com/flicat/p/8135875.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值