首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >组件缺少模板或呈现函数。在<App>

组件缺少模板或呈现函数。在<App>
EN

Stack Overflow用户
提问于 2022-09-05 14:36:16
回答 3查看 446关注 0票数 0

我对Vue js很陌生,我正在尝试运行这个应用程序,但是它返回空的空白页并带有错误:Component is missing template or render function. at <App>,它还显示了[Vue Router warn]: Record with path "/" is either missing a "component(s)" or "children" property.,Vue的版本是3

Vue Router.js

代码语言:javascript
运行
复制
import VirtualMachine from "../views/virtualMachine.vue";
import HomePage from "../views/home.vue";

import CustomerProfile from "../views/CustomerProfile.vue";
import LoginPage from "../views/LoginPage.vue";
import RegistrationPage from "../views/RegistrationPage.vue";

import { createRouter, createWebHistory } from "vue-router";

/* eslint-disable no-unused-vars */


const routes = [
 {
   path: '/',
   name: 'main_page',
   component: HomePage,
 },
 {
   path: '/login/',
   name: 'login_page',
   component: LoginPage,
 },
 {
   path: '/register/',
   name: 'register_page',
   component: RegistrationPage,
 },
 {
   path: '/virtual/machine/:VirtualMachineId',
   name: 'virtual_machine',
   component: VirtualMachine,
 },
 {
   path: '/customer/profile/',
   name: 'customer_profile',
   component: CustomerProfile,
 }
]

const router = createRouter({
 history: createWebHistory(process.env.BASE_URL),
 routes
})

export {router};

main.js

代码语言:javascript
运行
复制
import { createApp } from 'vue';
import {App} from './App.vue';
import { router } from "../router/router.js";

/* eslint-disable no-unused-vars */
createApp(App).use(router).mount('#app')

App.vue

代码语言:javascript
运行
复制
<template>
  
  <div v-if="virtualMachineLoaded">
    <div v-if="!mobile" class="app flex flex-column">
      <navigationPage />
      <div class="app-content flex flex-column">
        <modalPage v-if="modalActive" />
        <transition name="virtualMachine">
          <initializationModal v-if="initializationModal" />
        </transition>
        <router-view />
      </div>
    </div>
    <div v-else class="mobile-message flex flex-column">
      <h2>Sorry, this app is not supported on Mobile Devices</h2>
      <p>To use this app, please use a Laptop or Another Device</p>
    </div>
  </div>

</template>
<script>

/* eslint-disable no-unused-vars */

import { mapState, mapActions } from "vuex";
import navigationPage from "./components/NavigationPage";
import initializationModal from "./components/InitializationModal";
import modalPage from "./components/ModalWindow";

export default {
  name: "App",
  data() {
    return {
      mobile: null,
    };
  },
  components: {
    navigationPage,
    initializationModal,
    modalPage,
  },
  created() {
    this.GET_VIRTUAL_MACHINES();
    this.checkScreen();
    window.addEventListener("resize", this.checkScreen);
  },
  methods: {
    ...mapActions(["GET_VIRTUAL_MACHINES"]),
    checkScreen() {
      const windowWidth = window.innerWidth;
      if (windowWidth <= 750) {
        this.mobile = true;
        return;
      }
      this.mobile = false;
    },
  },
  computed: {
    ...mapState(["initializationModal", "modalActive", "VirtualMachinesLoaded"]),
  },
};

</script>

我知道,我没有提供所有文件的组件,但如果你看到一些错误或不匹配,请评论,

编辑:第二个错误不仅发生在主页上,而且也发生在所有路由上(这是否是导出的问题?)

其中一个路由组件如下所示,其他的则完全相似。

代码语言:javascript
运行
复制
<template>
  <div class="HomePage container">
    <router-link :to="{ name: 'Login'}"></router-link>
    <router-link :to="{ name: 'Register'}"></router-link>
    <router-view/>
    <!-- Header -->
    <div class="header flex">
      <div class="left flex flex-column">
        <h1>Virtual Machines</h1>
        <span>You have {{ virtualMachineData.length }} total Virtual Machines</span>
      </div>
      <div class="right flex">
        <div @click="toggleFilterMenu" class="filter flex">
          <span
            >Filter by status <span v-if="filteredVirtualMachine">: {{ filteredVirtualMachines }}</span></span
          >
          <img src="@/assets/icon-arrow-down.svg" alt="" />
          <ul v-show="filterMenu" class="filter-menu">
            <li @click="filteredVirtualMachine">Running</li>
            <li @click="filteredVirtualMachine">Shutdown</li>
            <li @click="filteredVirtualMachine">Deploying</li>
            <li @click="filteredVirtualMachine">Clear</li>
          </ul>
        </div>
        <div @click="newVirtualMachine" class="button flex">
          <div class="inner-button flex">
            <img src="@/assets/icon-plus.svg" alt="" />
          </div>
          <span>New VirtualMachine</span>
        </div>
      </div>
    </div>
    <!-- Virtual Machines -->
    <div v-if="virtualMachineData.length > 0">
      <Invoice v-for="(VirtualMachine, index) in filteredData" :VirtualMachine="VirtualMachine" :key="index" />
    </div>
    <div v-else class="empty flex flex-column">
      <img src="@/assets/illustration-empty.svg" alt="" />
      <h3>There is nothing here</h3>
      <p>Create a new invoice by clicking the New Invoice button and get started</p>
    </div>
  </div>
</template>

<script>

/* eslint-disable no-unused-vars */

import { mapMutations, mapState } from "vuex";

export default {

  name: "HomePage",
  data() {
    return {
      filterMenu: null,
      filteredVirtualMachine: null,
    };
  },
  methods: {

     ...mapMutations(["TOGGLE_VIRTUAL_MACHINE"]),

    newVirtualMachine() {
      // Initializes Empty Form for the Virtual Machine Configuration
      this.TOGGLE_VIRTUAL_MACHINE()
    },

    toggleFilterMenu() {
      this.filterMenu = !this.filterMenu;
    },

    filterVirtualMachine(e) {
      if (e.target.innerText === "Clear") {
        this.filteredVirtualMachine = null;
        return;
      }
      this.filteredVirtualMachine = e.target.innerText;
    },
  },

  computed: {
    ...mapState(["virtualMachineData"]),
    filteredData() {
      return this.virtualMachineData.filter((virtualMachine) => {

        if (this.filteredVirtualMachine === "Clear") {
          this.filteredVirtualMachine = null
          return true
        }
        if (this.filteredVirtualMachine === "Running") {
          return virtualMachine.Running === true;
        }
        if (this.filteredVirtualMachine === "Shutdown") {
          return virtualMachine.Shutdown === true;
        }
        if (this.filteredVirtualMachine === "Deploying") {
          return virtualMachine.Deploying === true;
        }
        return virtualMachine;
      });
  },
},
}

</script>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-09-05 15:08:50

main.js文件中的两个问题是在大括号中导入了Approuter。请使用以下语法:

代码语言:javascript
运行
复制
import App from './App.vue';
import router from "../router/router.js";

票数 1
EN

Stack Overflow用户

发布于 2022-09-05 14:57:33

我认为您的组件在路由器中导入可能是错误的。您不应该在导入期间对对象进行变形结构

更改:

代码语言:javascript
运行
复制
import {HomePage} from "../views/home.vue";

至:

代码语言:javascript
运行
复制
import HomePage from "../views/home.vue";
票数 2
EN

Stack Overflow用户

发布于 2022-09-05 14:56:37

错误出现在main.js文件中。您需要从'./App.vue‘导入App,如下所示:

代码语言:javascript
运行
复制
 import { App } from "./App.vue";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73611024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档