从页面隐藏 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>

此致。