0

I have a Vue Js App with a side nav with a drop-down list. When I change the route from one of the dropdowns to a single li, the dropdown remains open until a page refresh. How do I re-render the nav component so that the dropdown li closes on route change? I read somewhere that adding :key="$route.fullPath" will do but the dropdown list won't open anymore if that is added to <router-view/>.

How do I make this work?

UPDATE: Below is my side nav code:

<template>
    <nav class="navbar-default navbar-static-side" role="navigation" >
        <div class="sidebar-collapse">
            <ul class="nav metismenu" id="side-menu">
                <li class="nav-header">
                    <div class="dropdown profile-element">
                            <a data-toggle="dropdown" class="dropdown-toggle" >
                            <span class="clear"> <span class="block m-t-xs"> <strong class="font-bold">David Williams</strong>
                             </span> <span class="text-muted text-xs block">Art Director <b class="caret"></b></span> </span> </a>
                            <ul class="dropdown-menu animated fadeInRight m-t-xs">
                                <li><a href="#">Logout</a></li>
                            </ul>
                    </div>
                    <div class="logo-element">
                        IN+
                    </div>
                </li>
                <li :class="{ 'active': $route.name === 'home' }">
                    <router-link :to="{ name: 'home' }">
                        <i class="fa fa-home"></i>
                        <span>Home</span>
                    </router-link>
                </li>
                
                <li :class="{ 'active': $route.name === 'about' }">
                    <router-link :to="{ name: 'about' }">
                        <i class="fa fa-book"></i>
                        <span>About</span>
                    </router-link>
                </li>

                <li :class="{ 'active': $route.name === 'news' || $route.name === 'contact'}">
                    <a ><i class="fa fa-bar-chart-o"></i> <span class="nav-label">Others</span><span class="fa arrow"></span></a>
                    <ul class="nav nav-second-level collapse">
                    <li :class="{ 'active': $route.name === 'news' }">
                        <router-link :to="{ name: 'news' }">
                            <span>News</span>
                        </router-link>
                    </li>
                    <li :class="{ 'active': $route.name === 'contact' }">
                        <router-link :to="{ name: 'contact' }">
                            <span>Contact</span>
                        </router-link>
                    </li>
                    </ul>
                </li>
            </ul>

        </div>
    </nav>
</template>

<script>
export default {
    name : "SideNav",
}
</script>

<style>

</style>
Isaac Hatilima
  • 151
  • 1
  • 10

1 Answers1

0

Can you set up a watcher on the route object and programmatically close the dropdown in the side nav when the route changes? See this SO question

Zach M.
  • 74
  • 8