鍍金池/ 問答/HTML/ 一個vue頁面調(diào)用另一個vue頁面中的方法

一個vue頁面調(diào)用另一個vue頁面中的方法

想仿著 vue-materialDemo & Document 頁面的效果寫一個小例子.

遇到問題的地方是:
png_1

如上圖紅色圈出的地方,點擊 button 按鈕時,無法執(zhí)行 toggle() 方法,實現(xiàn)顯示 Sidenav 的效果。

代碼如下:

App.vue

...
<router-view/> // 里面主要內(nèi)容就是一個路由視圖
...

MenuItems.vue: 側(cè)邊菜單欄

<template>
    <div class="menu-items">
        <!-- 側(cè)邊欄 -->
        <md-sidenav ... ref="main-sidebar"> 
            ...
        </md-sidenav>
        <!-- 點擊 MenuItems 中的其中一個菜單,對應(yīng)的內(nèi)容顯示區(qū) -->
        <router-view/> 
    </div>
</template>
<script>
    export default {
        methods: {
            <!-- 想要在其他Vue中執(zhí)行的方法 -->
            toggleSidenavInMenuItems() {
                this.$refs['main-sidebar'].toggle();
            }
        }
    }
</script>

ContentPage.vue: 右側(cè)內(nèi)容容器(包括 toolbarcontent)

<template>
    <div class="content-page">
        <!-- Toolbar -->
        <md-whiteframe md-tag="md-toolbar">
            <md-button @click="toggleSidenavInContentPage()">Toggle按鈕</md-button>
        </md-whiteframe>
        <!-- Content -->
        <slot/>
    </div>
</template>
<script>
    export default {
        methods: {
            toggleSidenavInContentPage() {
                // TODO: 這里該怎么寫,去執(zhí)行在 MenuItems 中的 toggle..方法???
            }
        }
    }
</script>

IntroductionPage.vue: 使用ContentPage模板的例子

<template>
    <content-page>
        ...
    </content-page>
</template>

問題就是上述代碼中 TODO 那里,該怎么去定義 toggleSidenavInContentPage() 方法??

回答
編輯回答
編輯回答
貓館

vuex大法好,點擊的時候改變state某一個狀態(tài),另外一個頁面去computed這個變量,檢測到變化就去調(diào)用方法。

2017年8月25日 15:51
編輯回答
風畔

你可以這樣寫看看

在ContentPage.vue中
import ContentPage from 'ContentPage'
var content = ContentPage//在這個地方賦值一下
 export default {
        methods: {
            toggleSidenavInContentPage() {
                // TODO: 這里該怎么寫,去執(zhí)行在 MenuItems 中的 toggle..方法???
                content.methods.toggleSidenavInMenuItems();//這個地方掉用一下
            }
        }
    }
    這樣就可以調(diào)用了
2017年7月5日 20:05
編輯回答
陪她鬧

如果跨組件通信較少,可以使用vue的
&on https://cn.vuejs.org/v2/api/#...
$emit https://cn.vuejs.org/v2/api/#...
如果有大量的信息通信且跨越的層級比較多建議使用VUEX https://vuex.vuejs.org/zh-cn/

2017年4月20日 13:33
編輯回答
若相惜

用$emit和$on
用$emit發(fā)送,$on接收,具體參見鏈接
可以在App.vue里

import Vue from 'vue'
Event=new Vue()
//然后在組件里通過Event.$emit發(fā)送,Event.$on接收

或者新建一個event.js

import Vue from 'vue'
export var Event = new Vue()

在要傳遞的組件里

import { event } from 'event.js'
Event.$emit......
2017年3月2日 23:55