vue-router-multi-view
Sponsors
Gold
Silver
Bronze
About
Replace <router-view/> with <router-multi-view/> to keep the DOM of the deactivated route alive.
Useful Links
Installation
Npm
npm install --save vue-router-multi-view Install the plugin into Vue:
import Vue from 'vue' import VueRouterMultiView from 'vue-router-multi-view' Vue.use(VueRouterMultiView)Or use the directives and components directly:
import Vue from 'vue' import { VueRouterMultiView } from 'vue-router-multi-view' Vue.directive('router-multi-view', VueRouterMultiView)Browser
Include vue-router-multi-view in the page.
<script src="https://unpkg.com/vue-router-multi-view"></script>If Vue is detected in the Page, the plugin is installed automatically.
Manually install the plugin into Vue:
Vue.use(VueRouterMultiView)Usage
Replace <router-view/> with <router-multi-view/> and replace the name prop by the viewName prop (this is to prevent potential conflicts with <transition-group>).
<router-view/>, <router-multi-view/> will need to wrap the content with an element or component (default: <div>).
If you were using the keep-alive component, you need to remove it. So if you had:
<keep-alive> <router-view /> </keep-alive>It should be replaced by:
<router-multi-view /><router-multi-view /> already includes keep-alive and will trigger the activated and deactivated hooks on the children components.
Example:
<template> <div id="app"> <router-multi-view view-name="header" /> <router-multi-view /> <router-multi-view view-name="footer" /> </div> </template>Example of rendered HTML:
<div> <div class="page" data-route-path="/c" style="display: none;"> <h1>Nested routes</h1> <nav><a href="/c/" class="">Nested 1</a> <a href="/c/nested2" class="">Nested 2</a></nav> <!----> </div> <div class="page" data-route-path="/b2/:id" data-route-name="page-b2" style="display: none;"> <h1>Route with props params</h1> bar </div> <div class="page" data-route-path="" data-route-name="page-a" data-is-active="true"> <h1>Simple page</h1> </div> </div>You can change the element or component used to wrap the routes with the morph prop:
<router-multi-view morph="section" class="my-section" />To use transition, you need to use the viewName prop to set the name of the view, to prevent a conflict with the name prop for the transition:
<router-multi-view class="wrapper" view-name="default" morph="transition-group" tag="div" name="fade" />Here view-name and morph are <router-multi-view/> props, while tag and name are <transition-group> props.

