想仿着 vue-material
的 Demo & Document 页面的效果写一个小例子.
遇到问题的地方是:
如上图红色圈出的地方,点击 button
按钮时,无法执行 toggle()
方法,实现显示 Sidenav
的效果。
代码如下:
App.vue
...
<router-view/> // 里面主要内容就是一个路由视图
...
MenuItems.vue: 侧边菜单栏
<template>
<div class="menu-items">
<!-- 侧边栏 -->
<md-sidenav ... ref="main-sidebar">
...
</md-sidenav>
<!-- 点击 MenuItems 中的其中一个菜单,对应的内容显示区 -->
<router-view/>
</div>
</template>
<script>
export default {
methods: {
<!-- 想要在其他Vue中执行的方法 -->
toggleSidenavInMenuItems() {
this.$refs['main-sidebar'].toggle();
}
}
}
</script>
ContentPage.vue: 右侧内容容器(包括 toolbar
和 content
)
<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: 这里该怎么写,去执行在 MenuItems 中的 toggle..方法???
}
}
}
</script>
IntroductionPage.vue: 使用ContentPage模板的例子
<template>
<content-page>
...
</content-page>
</template>
问题就是上述代码中 TODO
那里,该怎么去定义 toggleSidenavInContentPage()
方法??
用$emit和$on
用$emit发送,$on接收,具体参见链接
可以在App.vue里
或者新建一个event.js