概念(懒加载)vue
当打包构建应用时,JavaScript
包会变得很是大,影响页面加载。若是咱们能把不一样路由对应的组件分割成不一样的代码块,而后当路由被访问的时候才加载对应组件,嗯,这样就更加高效了。es6
场景vue-router
xxx项目做为一个单页面应用,采用组件化的开发模式,每次启动首页都会加载所有组件,但此时只是访问了首页而已,就形成了大量组件污染加载的状况。npm
目的数组
只在访问当前页面时加载对应组件,避免页面组件所有加载。(按需加载)promise
实现babel
app.vue
app
<template> <div id="app"> <router-view/> </div> </template>
router.js
异步
import Vue from 'vue' import VueRouter from 'vue-router' import 'babel-polyfill' import {Promise} from 'es6-promise-polyfill' import App from '../components/app' // 定义路由,每一个路由映射一个组件。 const Routers = [ { path: '/', // 路径 component: resolve => require(['../components/member/index], resolve) // 异步加载组件 }, { path: '/login', component: resolve => require(['../components/member/login'], resolve) } ] const RouterConfig = { routes: Routers } // 建立router实例,并传递路由配置。 const router = new VueRouter(RouterConfig); // 建立并挂载根实例。 new Vue({ el:'#app', router, // 将h做为createElement的别名是一个通用惯例。 render: h =>(App) })
require()
函数接受两个参数。第一个参数是一个数组,表示所依赖的模块,例如['moduleA','moduleB']
,第二个参数是一个回调函数,当前面指定的模块都加载成功后,它将被调用。加载的模块会以参数形式传入该函数,从而在回调函数内部使用这些模块。require
函数负责异步引入将要渲染的组件,而resolve
则负责异步回调渲染组件。babel-polyfill
:对Promise
进行转码编译;npm install --save babel-polyfill
es6-promise-polyfill
解决Promise
兼容性问题。关于不太了解Promise
的同窗请移步这里 npm install --save es6-promise-polyfill
若有错误,还请不吝指正。函数