как сохранить стиль CSS с помощью Vue - PullRequest
0 голосов
/ 15 января 2019

Я изучаю vue и пытаюсь создать сайт с помощью vue. И я установил две навигационные вкладки на панели навигации.

Вот файл конфигурации маршрутизатора:

import Vue from 'vue'
import Router from 'vue-router'
import Management from '@/components/Management'
import Execution from '@/components/Execution'

Vue.use(Router)

const router = new Router({
  routes: [
    {
      path: '/',
      redirect: { name: 'Management'}
    },
    {
      path: '/management/list',
      name: 'Management',
      component: Management,
    },
    {
      path: '/execution/list',
      name: 'Execution',
      component: Execution
    }
  ]
})

router.beforeEach((to, from, next) => {
  next();
})

export default router

и App.vue:

<template>
  <div class="container">
    <div id="header">
        <ul class="nav-ul">
            <router-link tag="li" :class="['nav-li', {active: show === 'management'}]" v-on:click="changeShow('management')" :to="{name: 'Management'}"><span>case management</span></router-link>
            <router-link tag="li" :class="['nav-li', {active: show === 'execution'}]" v-on:click="changeShow('execution')" :to="{name: 'Execution'}"><span>case execution</span></router-link>
        </ul>
    </div>
    <router-view></router-view>
  </div>
</template>

<script>
export default {
  data: function(){
    return {
      show: 'management'
    }
  },
  computed: {
    changeShow: function (show) {
        this.show = show;
    }
  },
  watch: {
    '$route'(to, from) {
      if (to.name) {
        this.show = to.name.toLowerCase()
      }
    }
  }
}
</script>

<style>
  .container {
    height: 100%;
  }
  #header {
    height: 50px;
    width: 100%;
    background-image: linear-gradient(to bottom,#FF3300 0,#ff6600 20%);
  }
  .nav-ul,.nav-li 
  {
    margin: 0px;
    padding: 0px;
    list-style: none;
  }
  .nav-ul 
  {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
  }
  .nav-li {
    width: 100px; 
    height: 38px;
    text-align: center;
    padding-top: 12px;
    font-size: 16px;
  }
  .nav-li:hover {
    background-color: #FFCC00;
    cursor:pointer;
  }
  .nav-li.active {
    background-color: #FFCC00;
  }
</style>

Когда я щелкаю по вкладке execution, ожидается, что ее цвет фона изменится на # FFCC00 (класс вкладки nav-li active), а URL браузера будет /execution/list. Однако после обновления страницы класс вкладки management равен nav-li active, а цвет фона - # FFCC00, а URL-адрес по-прежнему /execution/list. Почему класс management tab становится nav-li active, а класс execution tab - nav-li?

1 Ответ

0 голосов
/ 16 января 2019

Вы используете watch свойство на $route, и оно отлично работает при изменении маршрута. Но когда вы обновляетесь, маршрут не меняется, поэтому часы подчеркивания никогда не запускаются. Создайте функцию mounted, проверьте имя маршрута и измените данные show соответственно. Примерно так должно работать:

mounted(){
    this.show = this.$route.name.toLowerCase();
}
...