Vuejs2 vue路由器可以';我无法访问我的组件
正如所问,我的vue路由器似乎找不到我的组件 我需要说的是,我在用户输入之后添加了一个新的路由,然后我无法访问这个特定的路由。我在Vuejs2 vue路由器可以';我无法访问我的组件,vuejs2,vue-component,vuex,vue-router,Vuejs2,Vue Component,Vuex,Vue Router,正如所问,我的vue路由器似乎找不到我的组件 我需要说的是,我在用户输入之后添加了一个新的路由,然后我无法访问这个特定的路由。我在router.js中创建的静态路由仍在工作。 我已尝试使用全局导入组件 import componentName from "./views/componentName" Vue.component("componentName") 还尝试只在路由器或我放置链接的组件中导入该组件,该链接将我们发送到该组件 然后,我收到以下错误消息: [Vue warn]:装载组件失
router.js
中创建的静态路由仍在工作。
我已尝试使用全局导入组件
import componentName from "./views/componentName"
Vue.component("componentName")
还尝试只在路由器或我放置链接的组件中导入该组件,该链接将我们发送到该组件
然后,我收到以下错误消息:
[Vue warn]:装载组件失败:未定义模板或渲染功能
这是我的密码:
router.js:
import Vue from "vue";
import Router from "vue-router";
Vue.use(Router);
import About from "./views/About.vue";
import Menu from "./views/Menu.vue";
import Home from "./views/Home.vue";
import Test from "./views/Test.vue";
export default new Router({
routes: [
{
path: "/home",
name: "home",
component: Home
},
{
path: "/about",
name: "about",
component: About
},
{
path: "/menu",
name: "menu",
component: Menu
}
]
});
main.js:
import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
import componentPlugin from "./componentPlugin";
import BootstrapVue from "bootstrap-vue";
import "bootstrap/dist/css/bootstrap.css";
import "bootstrap-vue/dist/bootstrap-vue.css";
Vue.config.productionTip = false;
new Vue({
router,
store,
render: h => h(App)
}).$mount("#app");
Vue.use(componentPlugin);
Vue.use(BootstrapVue);
组件插件:
import List from "./components/List.vue";
import MainMenu from "./components/MainMenu.vue";
import Test from "./views/Test.vue";
import About from "./views/About.vue";
import Menu from "./views/Menu.vue";
import Home from "./views/Home.vue";
export default {
install(Vue) {
Vue.component("List", List);
Vue.component("MainMenu", MainMenu);
Vue.component("Test", Test);
Vue.component("About", About);
Vue.component("Menu", Menu);
Vue.component("Home", Home);
}
};
List.vue:
<template>
<div>
<div v-if="title === 'Create new Project'">
<button @click="nepro = !nepro">{{ title }}</button>
</div>
<div v-if="title !== 'Create new Project'">
<b-container>
<b-row>
<b-col>
<p>{{ title }}</p>
<div id="nav">
<router-link :to="'/' + title">{{ title }}</router-link>
</div>
<router-view></router-view>
</b-col>
<b-col><button @click="delProject(id)">X</button></b-col>
</b-row>
</b-container>
</div>
<div v-if="nepro" @keydown.enter="newProject(projectName)">
<label for="qwer">Insert Name here: </label>
<br>
<input id="qwer" type="text" v-model="projectName">
<button :disabled="this.$store.state.projectname.length == 0" @click="newProject(projectName)">Finish</button>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import Test from "/home/pc-praktikant/VUE/test/src/views/Test.vue";
import About from "/home/pc-praktikant/VUE/test/src/views/About.vue";
export default {
name: "List",
components: {
Test,
About
},
props: {
title: String,
id: Number
},
data: function() {
return {
nepro: false
};
},
watch: {
reloaded: function() {
this.newRoute();
}
},
computed: {
projectName: {
get() {
return this.$store.state.projectname;
},
set(newVal) {
this.editProjectName(newVal);
}
},
...mapGetters({
reloaded: "getReloaded"
})
},
methods: {
newRoute() {
this.$router.addRoutes([
{ path: "/addedRoute", component: { name: "About" } }
]);
},
newProject(name) {
this.$store.dispatch("newProject", {
id: this.$store.getters.getProjectNumber,
title: this.$store.state.projectname,
compRate: 0
});
this.$store.dispatch("newRoute", {
path: "/" + name,
name: name,
comp: name
});
this.$store.commit("newName", "");
this.nepro = !this.nepro;
},
delProject(actualid) {
this.$store.dispatch("delProject", actualid);
},
editProjectName(name) {
this.$store.commit("newName", name);
}
}
};
</script>
<style>
</style>
此处指向/菜单的链接转到一个组件,该组件为我的vuex商店中的每个项目调用List.vue
store.js:
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
export default new Vuex.Store({
state: {
projects: [{ id: 0, title: "Create new Project", compRate: 0 }],
globalid: 1,
projectname: "",
reloaded: 0
},
mutations: {
newProject: (state, project) => {
state.projects.push({
id: project.id,
title: project.title,
compRate: project.compRate
});
},
delProject: (state, id) => {
state.projects.forEach(e => {
if (id === e.id) {
state.projects.splice(state.projects.indexOf(e), 1);
}
});
},
newName: (state, name) => {
state.projectname = name;
},
newRoute: state => {
state.reloaded++;
}
},
actions: {
newProject: ({ commit, state }, project) => {
commit("newProject", {
id: state.globalid,
title: project.title,
compRate: project.compRate
});
state.globalid++;
},
delProject: ({ commit }, id) => {
commit("delProject", id);
},
newRoute: ({ commit }) => {
commit("newRoute");
}
},
getters: {
getProjectNumber(state) {
return state.projects.length;
},
getReloaded(state) {
return state.reloaded;
}
}
});
我正在使用Vue v2.5.17和Vue路由器2.0
如果您需要更多信息,请告诉我。您不能像这样全局定义组件。全局声明组件时,您忘记声明此组件的内容和功能。此问题已在错误报告中指出
正确的定义代码应该是这样的
import componentName from "./views/componentName"
Vue.component("componentName", componentName)
您可以在官方手册中找到并定义更多的组件和语料库定义
希望对你有帮助
import componentName from "./views/componentName"
Vue.component("componentName", componentName)