vue.js router-link 没有加载组件
vue.js router-link does not load component
我是 vue.js 的新手,制作了这个 Landing
组件,link 编辑到 Login
组件。我想要实现的是,当用户单击“登录”时,会显示登录页面。
<template>
<div>
<div class="landing">
<router-link to="/login">Login</router-link>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'Landing',
data: function () {
return {
}
},
methods: {
}
}
</script>
main.js:
import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router'
import Materials from "vue-materials"
import Routes from './routes'
const router = new VueRouter({
routes: Routes,
mode: 'history'
});
Vue.use(Materials)
Vue.use(VueRouter);
Vue.config.productionTip = false
new Vue({
router: router,
render: h => h(App)
}).$mount('#app')
App.Vue :
<template>
<div id="app">
<head>
<link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.6/css/materialize.css" rel="stylesheet">
</head>
<NavbarComp/>
<Landing/>
<FooterComp/>
</div>
</template>
<script>
import NavbarComp from './components/Navbar.vue';
import FooterComp from './components/Footer.vue';
import Landing from './components/Landing.vue';
import Login from './components/Login.vue';
import Register from './components/Register.vue';
export default {
name: 'app',
components: {
NavbarComp,
Landing,
FooterComp,
Login,
Register
}
}
</script>
routes.js:
import Login from './components/Login.vue';
import Register from './components/Register.vue';
import Landing from './components/Landing.vue';
export default [
{path: '/login', component: Login, name: 'Login'},
{path: '/register', component: Register, name: 'Register'},
{path: '/', component: Landing, name: 'landing'},
]
最后,Login.vue:
<template>
<div>
<h2>Login</h2>
</div>
</template>
<script>
import axios from 'axios';
export default {
name: 'Login',
data: function () {
return {
ok: true,
showErrorRegister: false,
showErrorLogin: false,
username: "",
password: "",
email: "",
error: "",
}
},
当我点击登录 link 时,URL 栏中的 link 发生了变化,但组件没有出现,我在控制台中也没有看到任何错误。所以不知道从这里去哪里。
我该如何解决这个问题?
详细说明 Cory 的评论 - 我认为这是问题所在。您缺少 <router-view>
.
您的应用目前似乎可以运行,因为在 App.Vue 中您正在渲染 <Landing/>
组件。您应该将 <Landing/>
替换为 <router-view/>
。这样,当路由路径为“/”时,<router-view>
将在 space 中呈现 <Landing/>
组件——就像现在一样。当路由路径(通过路由器-link)更改为“/Login”时,路由器将在 space 中渲染 <Login/>
组件。
当前路由器指向正确的登录组件,但是没有地方可以渲染它。
在此处阅读更多内容:https://router.vuejs.org/guide/#html
我是 vue.js 的新手,制作了这个 Landing
组件,link 编辑到 Login
组件。我想要实现的是,当用户单击“登录”时,会显示登录页面。
<template>
<div>
<div class="landing">
<router-link to="/login">Login</router-link>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'Landing',
data: function () {
return {
}
},
methods: {
}
}
</script>
main.js:
import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router'
import Materials from "vue-materials"
import Routes from './routes'
const router = new VueRouter({
routes: Routes,
mode: 'history'
});
Vue.use(Materials)
Vue.use(VueRouter);
Vue.config.productionTip = false
new Vue({
router: router,
render: h => h(App)
}).$mount('#app')
App.Vue :
<template>
<div id="app">
<head>
<link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.6/css/materialize.css" rel="stylesheet">
</head>
<NavbarComp/>
<Landing/>
<FooterComp/>
</div>
</template>
<script>
import NavbarComp from './components/Navbar.vue';
import FooterComp from './components/Footer.vue';
import Landing from './components/Landing.vue';
import Login from './components/Login.vue';
import Register from './components/Register.vue';
export default {
name: 'app',
components: {
NavbarComp,
Landing,
FooterComp,
Login,
Register
}
}
</script>
routes.js:
import Login from './components/Login.vue';
import Register from './components/Register.vue';
import Landing from './components/Landing.vue';
export default [
{path: '/login', component: Login, name: 'Login'},
{path: '/register', component: Register, name: 'Register'},
{path: '/', component: Landing, name: 'landing'},
]
最后,Login.vue:
<template>
<div>
<h2>Login</h2>
</div>
</template>
<script>
import axios from 'axios';
export default {
name: 'Login',
data: function () {
return {
ok: true,
showErrorRegister: false,
showErrorLogin: false,
username: "",
password: "",
email: "",
error: "",
}
},
当我点击登录 link 时,URL 栏中的 link 发生了变化,但组件没有出现,我在控制台中也没有看到任何错误。所以不知道从这里去哪里。
我该如何解决这个问题?
详细说明 Cory 的评论 - 我认为这是问题所在。您缺少 <router-view>
.
您的应用目前似乎可以运行,因为在 App.Vue 中您正在渲染 <Landing/>
组件。您应该将 <Landing/>
替换为 <router-view/>
。这样,当路由路径为“/”时,<router-view>
将在 space 中呈现 <Landing/>
组件——就像现在一样。当路由路径(通过路由器-link)更改为“/Login”时,路由器将在 space 中渲染 <Login/>
组件。
当前路由器指向正确的登录组件,但是没有地方可以渲染它。
在此处阅读更多内容:https://router.vuejs.org/guide/#html