从页面隐藏 vue 路由器

新手上路,请多包涵

是否可以从我的登录页面隐藏 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>

主.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)
    });

首页.vue

 <template>
    <div>
        <h1>Home</h1>
        <hr>
        <router-view></router-view>
    </div>
</template>

<script>

</script>

<style scoped>
h1 {
    background-color: aquamarine;
}
</style>

在此处输入图像描述

原文由 Lucafraser 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 608
2 个回答

我只是遇到了同样的问题,发现了两种方法:

1. 使用嵌套路由 - http://router.vuejs.org/en/essentials/nested-routes.html

基本上你必须使用你的 App.vue 作为一种占位符,所有页面之间共享所有元素(在你的情况下我相信没有),并将 <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>

问候。

原文由 dime2lo 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以为此使用 v-if

 <router-link v-if="!isOnLoginPage()" to="/">Login</router-link>

其中 isOnLoginPage 可以是一个简单的方法,它根据当前路由返回 true 或 false。

 isOnLoginPage: function() {
  return this.$route.path === '/'
}

原文由 Saurabh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题