【发布时间】:2022-01-25 03:17:56
【问题描述】:
我有一个 Vue 3 应用程序,我想从另一个组件调用全局组件的方法。
代码如下:
//main.js
import { createApp, h } from 'vue';
import Loading from '@/components/Loading'; // Global Loading Component
const App = {
computed: {
ViewComponent () {
return require(`./views/Index.vue`).default
}
},
render () {
return h(this.ViewComponent)
},
}
const app = createApp(App);
app.component('Loading', Loading); // Adding it to Global
app.mount('#app');
//@/components/Loading.vue
<template>
<div id="darken"></div>
<div id="loading">
<img src="@/assets/images/loading.gif" />
</div>
</template>
<script>
export default {
name: 'Loading',
methods: {
showLoading(){
document.getElementById("darken").style.display = "inline";
document.getElementById("loading").style.display = "inline";
},
hideLoading(){
document.getElementById("darken").style.display = "none";
document.getElementById("loading").style.display = "none";
}
}
}
</script>
<style>
#darken {
position: absolute;
display: none;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: black;
opacity: 0.5;
}
#loading {
position: absolute;
display: none;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%); /* for IE 9 */
-webkit-transform: translate(-50%, -50%); /* for Safari */
}
#loading img {
width: 400px;
}
</style>
//@/views/Index.vue
<template>
<!-- Design Stuff ... -->
<button v-on:click="login()">Login</button>
<loading />
</template>
<script>
export default {
methods: {
login(){
//this.$refs.Loading.showLoading(); // this works when i add ref="Loading" to the <loading /> tag
// but i need something better, something like "this.$components.Loading.showLoading();"
// adding ref="Loading" with the loading tag is not convenient for me // is there alternative?
}
}
}
</script>
我找了很多,找不到我要找的东西。
任何想法?,我真的很感激。谢谢。
PS:我是 Vue.js 的新手,但我学得很快。
【问题讨论】:
标签: javascript vue.js