zoukankan      html  css  js  c++  java
  • 使用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了!

  • 相关阅读:
    Sencha Touch 框架快速入门系列
    dotTrace 使用说明
    CQRS架构中同步服务的一种实现方式
    C#中循环结构的效率问题
    面向领域驱动架构的查询实现方式
    最佳 jQuery
    DWZ&MVC的探索系列——Demo演示效果
    在Windows Azure中实现和调试一个WCF服务(上)
    现代软件工程开发体验:结对编程
    结对编程是什么?
  • 原文地址:https://www.cnblogs.com/flicat/p/8135875.html
Copyright © 2011-2022 走看看