从页面隐藏 vue 路由器
Hide vue router from a page
是否可以从我的登录页面隐藏 vue-router?如果是这样,我该怎么做?我在每个页面上都能看到菜单,但在登录页面上我不想看到它。
这是我的代码:
登录
<template>
<div>
<h1>Login</h1>
<form action="">
<label>naam</label>
<input type="text">
</form>
</div>
</template>
<script>
</script>
<style scoped>
h1 {
background-color: chartreuse;
}
</style>
App.vue
<template>
<div id="app">
<div class="routing">
</div>
<router-link to="/">Login</router-link>
<router-link to="/home">Home</router-link>
<router-view v-if="$route = 'login'"></router-view>
</div>
</template>
<script>
export default {
data () {
return {
}
}
}
</script>
Main.js
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
import Login from './Login.vue'
import Home from './Home.vue'
Vue.use(VueRouter);
const routes = [
{ path: '/', component: Login},
{ path: '/home', component: Home},
];
const router = new VueRouter({
routes,
mode: 'history'
});
new Vue({
el: '#app',
router,
render: h => h(App)
});
Home.vue
<template>
<div>
<h1>Home</h1>
<hr>
<router-view></router-view>
</div>
</template>
<script>
</script>
<style scoped>
h1 {
background-color: aquamarine;
}
</style>
您可以为此使用 v-if
:
<router-link v-if="!isOnLoginPage()" to="/">Login</router-link>
其中 isOnLoginPage
可以是一个简单的方法,returns true 或 false 取决于当前路由。
isOnLoginPage: function() {
return this.$route.path === '/'
}
如果您的登录路径是“/login”
在你的App.vue
<template>
<div id="app">
<div class="routing">
</div>
<router-link to="/" v-if="$route.fullPath !== '/login'">Login</router-link>
<router-link to="/home" v-if="$route.fullPath !== '/login'">Home</router-link>
<router-view v-if="$route.fullPath === '/login'"></router-view>
</div>
</template>
<script>
export default {
data () {
return {
}
}
}
</script>
我刚遇到同样的问题,找到了两种方法:
1.使用嵌套路由 - http://router.vuejs.org/en/essentials/nested-routes.html
基本上你必须使用你的 App.vue 作为一种占位符,所有页面之间共享的所有元素(在你的情况下我认为是 none),并放置<router-view></router-view>
在里面。对你来说,我相信这会很简单:
//App.vue
<template>
<div id="app">
<router-view></router-view>
</div>
</template>
而且您还必须有另一个模板来保存您的菜单:
//Restricted.vue
<template>
<div id="restricted">
<div class="routing">
</div>
<router-link to="/">Login</router-link>
<router-link to="/home">Home</router-link>
<router-view></router-view>
</div>
</template>
在你的路由器中应该有这样的东西:
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
import Login from './Login.vue'
import Home from './Home.vue'
import Restricted from '/.Restricted.vue';
Vue.use(VueRouter);
const routes = [
{ path: '/', component: Login},
{
path: '/restricted',
component: Restricted,
children: [
{ path: 'home', component: Home},
],
},
];
const router = new VueRouter({
routes,
mode: 'history'
});
new Vue({
el: '#app',
router,
render: h => h(App)
});
这样您的登录页面将呈现在 /
和其他页面(带菜单)呈现在 /restricted/{other_page}
。使用此方法将不会显示或呈现菜单。
2。在您不想渲染的组件上使用 v-if
。
在您 App.vue
中,对您不想呈现的元素使用 v-if="this.$route.path !== '/'"
,在您的情况下,router-link
。您可以封装它们并将 v-if="this.$route.path !== '/'"
应用于封装元素 (div
?)
//App.vue
<template>
<div id="app">
<div class="routing" v-if="this.$route.path !== '/'">
<router-link to="/">Login</router-link>
<router-link to="/home">Home</router-link>
</div>
<router-view></router-view>
</div>
</template>
此致。
是否可以从我的登录页面隐藏 vue-router?如果是这样,我该怎么做?我在每个页面上都能看到菜单,但在登录页面上我不想看到它。
这是我的代码:
登录
<template>
<div>
<h1>Login</h1>
<form action="">
<label>naam</label>
<input type="text">
</form>
</div>
</template>
<script>
</script>
<style scoped>
h1 {
background-color: chartreuse;
}
</style>
App.vue
<template>
<div id="app">
<div class="routing">
</div>
<router-link to="/">Login</router-link>
<router-link to="/home">Home</router-link>
<router-view v-if="$route = 'login'"></router-view>
</div>
</template>
<script>
export default {
data () {
return {
}
}
}
</script>
Main.js
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
import Login from './Login.vue'
import Home from './Home.vue'
Vue.use(VueRouter);
const routes = [
{ path: '/', component: Login},
{ path: '/home', component: Home},
];
const router = new VueRouter({
routes,
mode: 'history'
});
new Vue({
el: '#app',
router,
render: h => h(App)
});
Home.vue
<template>
<div>
<h1>Home</h1>
<hr>
<router-view></router-view>
</div>
</template>
<script>
</script>
<style scoped>
h1 {
background-color: aquamarine;
}
</style>
您可以为此使用 v-if
:
<router-link v-if="!isOnLoginPage()" to="/">Login</router-link>
其中 isOnLoginPage
可以是一个简单的方法,returns true 或 false 取决于当前路由。
isOnLoginPage: function() {
return this.$route.path === '/'
}
如果您的登录路径是“/login”
在你的App.vue
<template>
<div id="app">
<div class="routing">
</div>
<router-link to="/" v-if="$route.fullPath !== '/login'">Login</router-link>
<router-link to="/home" v-if="$route.fullPath !== '/login'">Home</router-link>
<router-view v-if="$route.fullPath === '/login'"></router-view>
</div>
</template>
<script>
export default {
data () {
return {
}
}
}
</script>
我刚遇到同样的问题,找到了两种方法:
1.使用嵌套路由 - http://router.vuejs.org/en/essentials/nested-routes.html
基本上你必须使用你的 App.vue 作为一种占位符,所有页面之间共享的所有元素(在你的情况下我认为是 none),并放置<router-view></router-view>
在里面。对你来说,我相信这会很简单:
//App.vue
<template>
<div id="app">
<router-view></router-view>
</div>
</template>
而且您还必须有另一个模板来保存您的菜单:
//Restricted.vue
<template>
<div id="restricted">
<div class="routing">
</div>
<router-link to="/">Login</router-link>
<router-link to="/home">Home</router-link>
<router-view></router-view>
</div>
</template>
在你的路由器中应该有这样的东西:
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
import Login from './Login.vue'
import Home from './Home.vue'
import Restricted from '/.Restricted.vue';
Vue.use(VueRouter);
const routes = [
{ path: '/', component: Login},
{
path: '/restricted',
component: Restricted,
children: [
{ path: 'home', component: Home},
],
},
];
const router = new VueRouter({
routes,
mode: 'history'
});
new Vue({
el: '#app',
router,
render: h => h(App)
});
这样您的登录页面将呈现在 /
和其他页面(带菜单)呈现在 /restricted/{other_page}
。使用此方法将不会显示或呈现菜单。
2。在您不想渲染的组件上使用 v-if
。
在您 App.vue
中,对您不想呈现的元素使用 v-if="this.$route.path !== '/'"
,在您的情况下,router-link
。您可以封装它们并将 v-if="this.$route.path !== '/'"
应用于封装元素 (div
?)
//App.vue
<template>
<div id="app">
<div class="routing" v-if="this.$route.path !== '/'">
<router-link to="/">Login</router-link>
<router-link to="/home">Home</router-link>
</div>
<router-view></router-view>
</div>
</template>
此致。