- #### 动态路由以及传值
export default new Router({ routes: [{ path: '/', name: 'Home', component: Home }, { path: '/city', name: 'City', component: City }, { path: '/detail/:id', name: 'Detail', component: Detail }] })
第三个就是动态路由,在页面中如何使用动态路由的参数:
this.$route.params.id
- #### keep-alive
<keep-alive> <router-view></router-view> </keep-alive>
默认这么使用是所有的页面数据都会被缓存再次使用。 如果想要指定的页面不需要缓存数据可以这么做:
方案一:
activated () { }
在每个页面调用 activated 的时候做数据再次加载重置等操作
方案二:
<keep-alive exclude="Detail"> <router-view></router-view> </keep-alive>
将不需要缓存的页面名字写在这里就可以了。但是这样的话每次都会去请求更新当前页面的数据内容,所以可以更具情况使用吧。
- #### 滚动行为
滚动行为 每次滚动其他的页面也会跟着滚动,可以这么修改 router/index.js
export default new Router({ routes: [{ path: '/', name: 'Home', component: Home }, { path: '/city', name: 'City', component: City }, { path: '/detail/:id', name: 'Detail', component: Detail }], scrollBehavior (to, from, savedPosition) { return { x: 0, y: 0 } } })
也就是说每次进入一个新的路由都从 xy 为 0 的位置开始。
- #### 异步加载组件
import Vue from 'vue' import Router from 'vue-router' import Home from '@/pages/home/Home' import City from '@/pages/city/City' import Detail from '@/pages/detail/Detail' Vue.use(Router) export default new Router({ routes: [{ path: '/', name: 'Home', component: Home }, { path: '/city', name: 'City', component: City }, { path: '/detail/:id', name: 'Detail', component: Detail }], scrollBehavior (to, from, savedPosition) { return { x: 0, y: 0 } } })
上面这种是会一次性拿回所有页面的 js 代码,推荐在小型项目的时候使用。
当项目太大的时候,js(至少超过1mb才考虑使用异步组件) 文件会很庞大, 那么我们需要每个页面只拿每个页面的代码,那么我们就需要用到异步加载,进行 js 的拆分加载:
import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) export default new Router({ routes: [{ path: '/', name: 'Home', component: () => import('@/pages/home/Home') }, { path: '/city', name: 'City', component: () => import('@/pages/city/City') }, { path: '/detail/:id', name: 'Detail', component: () => import('@/pages/detail/Detail') }], scrollBehavior (to, from, savedPosition) { return { x: 0, y: 0 } } })
子组件也是一样的可以使用异步加载:
同步加载:
import HomeHeader from './components/Header' import HomeSwiper from './components/Swiper' export default { name: 'Home', components: { HomeHeader, HomeSwiper } }
异步加载:
export default { name: 'Home', components: { HomeHeader: () => import('./components/Header'), HomeSwiper: () => import('./components/Swiper'), } }