javascript - 来自全局组件的 Vue/Nuxt 访问函数
问题描述
我的 NUXT 应用程序默认布局中有一个全局注册的组件(模态),我希望能够在点击事件上触发来自任何其他组件的方法。我最初通过将组件导入每个页面来设置它,但我宁愿这是一个全局组件,而不必在每个页面上显式导入,并且在默认布局中只调用一个寄存器。我使用 $root.$emit 可以做到这一点吗?还是我应该看看 vue 商店?
默认布局:
<template>
<div class="layout-wrapper">
<Nuxt />
<Modal />
</div>
</template>
<script>
import Modal from "~/components/Modal.vue";
export default {
name: "DefaultLayout",
components: {
Modal
}
};
</script>
模态:
<template>
<div>
<el-dialog :visible.sync="modal">
<div class="dialog-content">
<p>
Modal Content
</p>
</div>
</el-dialog>
</div>
</template>
<script>
import { Dialog } from "element-ui";
export default {
name: "Modal",
components: {
"el-dialog": Dialog
},
data() {
return {
modalOne: false
};
},
methods: {
openModal() {
this.modalOne = true;
}
}
};
</script>
要调用方法的其他组件:
<a href="javascript:void(0)" @click="openModal">Open</a>
解决方案
使用商店是满足您需求的一个很好的解决方案:
1/ 创建存储文件store/index.js
export const state = () => ({
modal: false
});
export const mutations = {
SET_MODAL (state, value) {
state.modal = value
}
};
2/ 更新您的布局以将商店数据设置为模态组件:
<template>
<div class="layout-wrapper">
<Nuxt />
<Modal open="$store.state.modal" />
</div>
</template>
3/ 更新您的组件以读取open
值:
<template>
<div>
<el-dialog :visible.sync="open">
<div class="dialog-content">
<p>
Modal Content
</p>
</div>
</el-dialog>
</div>
</template>
<script>
import { Dialog } from "element-ui";
export default {
props: {
open: Boolean // see https://vuejs.org/v2/guide/components-props.html
},
name: "Modal",
components: {
"el-dialog": Dialog
}
};
</script>
4/ 从 nuxt 页面切换存储值(请参阅https://nuxtjs.org/docs/2.x/directory-structure/store)
<script>
export default {
methods: {
openModal (e) {
this.$store.commit('SET_MODAL', true);
}
},
...
}
</script>
推荐阅读
- insert - 将 row_number 插入表(teradata)
- kubernetes - PVC 具有非绑定阶段(“待定”)
- rest - 如何知道哪个 fareComponent 与 BargainFinderMaxRS 中的段相关联
- mysql - WITH (...) IF ... IN ... 在 MySQL 触发器中
- python - 编写一个名为 index_of_smallest 的函数,它接受一个整数列表
- c++ - 我们如何使用下面的集合构造函数示例构造集合元素?
- r - 将 S4 对象转换为数据框 (R) 的一般方法
- ios - 如何正确设置 RN AccessibilityInfo setAccessibilityFocus
- javascript - 用javascript/html分隔男性和女性名字?
- excel - 如何编写自定义格式以使 3.33 显示为“3.33”但 3 显示为“3”?