路由懒加载优化

首先得需要插件支持:syntax-dynamic-import

import Vue from 'vue'
import VueRouter from 'vue-router'
/*import First from '@/components/First'
import Second from '@/components/Second'*/Vue.use(VueRouter)
//方案1
const first =()=>import(/* webpackChunkName: "group-foo" */ "../components/first.vue");
const second = ()=>import(/* webpackChunkName: "group-foo" */ "../components/second.vue");
const three = ()=>import(/* webpackChunkName: "group-fooo" */ "../components/three.vue");
const four = ()=>import(/* webpackChunkName: "group-fooo" */ "../components/four.vue");
//方案2
const first = r => require.ensure([], () => r(require('../components/first.vue')), 'chunkname1')
const second = r => require.ensure([], () => r(require('../components/second.vue')), 'chunkname1')
const three = r => require.ensure([], () => r(require('../components/three.vue')), 'chunkname2')
const four = r => require.ensure([], () => r(require('../components/four.vue')), 'chunkname2')//懒加载路由
const routes = [{   //当首次进入页面时,页面没有显示任何组件;让页面一加载进来就默认显示first页面path:'/', //重定向,就是给它重新指定一个方向,加载一个组件;component:first},{path:'/first',component:first},{path:'/second',component:second}, {path:'/three',component:three},{path:'/four',component:four}
//这里require组件路径根据自己的配置引入
]
//最后创建router 对路由进行管理,它是由构造函数 new vueRouter() 创建,接受routes 参数。const router = new VueRouter({routes
})export default router;

  https://www.zhihu.com/question/50121629

 

// 进入路由beforeRouteEnter (to, from, next) {getPost(to.params.id, post => {// 由于组件还没有初始化, this 不存在// next 接受一个回调, 用于切换路由后执行, 可以通过vm获取实例next(vm => {vm.post = post})})},// 路由变化beforeRouteUpdate (to, from, next) {getPost(to.params.id, (post) => {// 组件已经初始化, this 存在this.post = postnext()})}

  如果我们需要使用 Vuex ,可能会遇到更多问题:

  • 无法获取 $store ( beforeRouteEnter中无法获取this )
  • 无法获取组件实例的 methods( beforeRouteEnter中无法获取this )
  • 无法控制 dispatch 流程

个人比较习惯这样解决:

首先封装 Promise 用于控制 dispatch 流。

// store.js
const generate = commit => (id, mutation) => {return new Promise((resolve, reject) => {getPost(id).then(data => {commit(mutation, data)resolve()})})
}

  正常使用 actions 和 mutations。

// store.js
[action.yourAction] ({ commit, state }) {return generate(commit)(yourId, mutation.yourMutation)
},
[mutation.yourMutation] (state, data) {state.yourPost = data
}

  在组件中使用引入store,并运用 Promise 控制流程。

// YourComponent.vue
import store from './yourRoute/store.js'export default {beforeRouteEnter: (to, from, next) => {Promise.all([store.dispatch(types.yourModule.action.yourAction)]).then(() => {next()})},computed: {...mapGetters({yourPost: types.yourModule.getter.yourPost})},
}

  先异步请求数据,动态构建好router,再初始化App组件。index.html里面加个loading效果,App组件创建好会自动替换掉它。

import Vue from 'vue'
import VueRouter from 'vue-router'
/*import First from '@/components/First'
import Second from '@/components/Second'*/
   
Vue.use(VueRouter)
//方案1
const first =()=>import(/* webpackChunkName: "group-foo" */ "../components/first.vue");
const second = ()=>import(/* webpackChunkName: "group-foo" */ "../components/second.vue");
const three = ()=>import(/* webpackChunkName: "group-fooo" */ "../components/three.vue");
const four = ()=>import(/* webpackChunkName: "group-fooo" */ "../components/four.vue");
//方案2
const first = r => require.ensure([], () => r(require('../components/first.vue')), 'chunkname1')
const second = r => require.ensure([], () => r(require('../components/second.vue')), 'chunkname1')
const three = r => require.ensure([], () => r(require('../components/three.vue')), 'chunkname2')
const four = r => require.ensure([], () => r(require('../components/four.vue')), 'chunkname2')
//懒加载路由
const routes = [
 {   //当首次进入页面时,页面没有显示任何组件;让页面一加载进来就默认显示first页面
 path:'/'//重定向,就是给它重新指定一个方向,加载一个组件;
 component:first
 },
 {
 path:'/first',
 component:first
 },
 {
 path:'/second',
 component:second
 }, {
 path:'/three',
 component:three
 },
 {
 path:'/four',
 component:four
 }
//这里require组件路径根据自己的配置引入
]
//最后创建router 对路由进行管理,它是由构造函数 new vueRouter() 创建,接受routes 参数。
   
 const router = new VueRouter({
 routes
})
   
export default router;

转载于:https://www.cnblogs.com/smzd/p/8665676.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue全面介绍--全家桶、项目实例

简介 “简单却不失优雅,小巧而不乏大匠”。 2016年最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,“vue.js兼具angular.js和react.js的优点,并剔除了它们的缺点”。授予了这么高的评价的vue.js,也是开…

关于Keychain

1、Keychain 浅析 2、iOS的密码管理系统 Keychain的介绍和使用 3.iOS开发中,唯一标识的解决方案之keyChainUUID 转载于:https://www.cnblogs.com/KiVen2015/p/9341224.html

算法群模拟面试记录

第一场:2018年12月30日(周日),北京时间早上五点。 写在最前面:好不容易五点爬了起来围观mock,结果早上周赛睡过去了,唉。orz。 面试官:wisdompeak,同学:littl…

js对象排序

Object.keys(objs).sort()可以获取到排好序的keysvar objs {f: {id: 2,name: 2}, a: {id: 3,name: 3}, c: {id: 1,name: 1} }; // 自定义排序规则,按对象的id排序 var sortedObjKeys Object.keys(objs).sort(function(a, b) {return objs[b].id - objs[a].id; });…

吴恩达机器学习笔记 —— 9 神经网络学习

本章讲述了神经网络的起源与神经元模型,并且描述了前馈型神经网络的构造。 更多内容参考 机器学习&深度学习 在传统的线性回归或者逻辑回归中,如果特征很多,想要手动组合很多有效的特征是不现实的;而且处理这么大的特征数据量…

js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解

1 escape()函数 定义和用法escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。 语法escape(string) 参数 描述string 必需。要被转义或编码的字符串。 返回值已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。 说明该方…

【SRH】------node遵循的规范,模块划分

1.node遵循的是COMMONJS规范(规范即规定如何导入导出)1、导入:require 2、导出:module.exports2.模块分类:1、核心模块nodejs下载安装完成后会自带一些模块,这些模块不需要下载,可以直接通过r…

vue.js开发环境搭建

环境准备 Node.js Javascript的运行时环境npm Node.js下的包管理工具webpack 前端资源模块化管理和打包工具vue-cli 脚手架构建工具cnpm npm的淘宝镜像 Vue.js安装 Node.js的安装非常容易,首先从官网下载你所需操作系统的版本,然后一直下一步就ok&…

mysql数据库删除一条数据后还想让新增数据从空缺id处开始

方法1: truncate table 你的表名 //这样不但将数据全部删除,而且重新定位自增的字段 方法2: delete from 你的表名 dbcc checkident(你的表名,reseed,0) //重新定位自增的字段,让它从1开始 方法3: 如果你要保存你的数…

Object相关方法

const object1 {a: somestring,b: 42,c: false };console.log(Object.values(object1)); // expected output: Array ["somestring", 42, false]该Object.values()方法返回给定对象自己的可枚举属性值的数组,其顺序与for...in循环提供的顺序相同&#xf…

用Itextsharp 组件导出PDF 的文档的方法

Itextsharp 是一个很强大,开源的,轻量级的 PDF 生成组件,官方网上好像没有相应的API 说明文档,以下是在工作中使用的心得与体会,并附上源码,功能包含了pdf 的创建,table 的创建, 图片…

正则基础知识

创建正则表达式 1.使用new来创建 var exp new RegExp(box , gi );g 全局匹配 i 忽略大小写 m 多行匹配2.使用字面量 var exp /box/gi; 直接用2个 / ; 在俩个斜杠后加上模式修饰符; 俩种创建方式比较: 1.使用字面量方式创建用的更加广泛; 2.当要匹配的内容是变量时,…

详解 vue-cli 的打包配置文件代码

一、前言 对于webpack基础不好,node指令不通的童鞋。估计对自己搭建Vue、react脚手架是相当头疼的,有种无从下手的感觉。然而,从头看这2块,耗时太长,而且说实话得练才行,不练练手看不明白。那大多数人就采…

室内定位(一)

转自:http://www.cnblogs.com/rubbninja/ 各种室内定位方法 具体的室内无线定位技术可以这样来分类: 无线设备:WIFI、蓝牙、ZigBee、RFID、UWB、LED、红外线、超声波、麦克风等定位信息:主要是RSS(接收信号强度&#x…

不同浏览器css引入外部字体的方式

/*** 字体后缀和浏览器有关,如下所示* .TTF或.OTF,适用于Firefox 3.5、Safari、Opera * .EOT,适用于Internet Explorer 4.0 * .SVG,适用于Chrome、IPhone * 比如:*/ font-face {font-family: MyFont;/*定义字体名称*/src: url(fon…

Promise实践

var doSomething function() { return new Promise((resolve, reject) > { resolve(返回值); }); };let doSomethingElse function() { return 新的值; }doSomething().then(function () { return doSomethingElse(); }).then(resp > { console.warn(resp); console.wa…

JsonBuilder初出茅庐

互联网这股东风不久前刮到了甘凉国,国王老甘独具慧眼,想赶紧趁着东风未停大力发展移动互联网,因为他笃信布斯雷的理论:“站在风口上,猪都能飞起来”。无奈地方偏僻落后,国内无可用之才啊。老甘一筹莫展的低…

vue-cli 打包部署

1、一般打包 :直接 npm run build。(webpack的文件,根据不同的命令,执行不同的代码的) 注:这种打包的静态文件,只能放在web服务器中的根目录下才能运行。 2、在服务器中 非根目录下 运行的 打包…

EXCEL怎么打20位以上的数字?

EXCEL怎么打20位以上的数字? 转载于:https://www.cnblogs.com/macT/p/10208794.html

vue render函数

Vue中的Render渲染函数 VUE一般使用template来创建HTML&#xff0c;然后在有的时候&#xff0c;我们需要使用javascript来创建html&#xff0c;这时候我们需要使用render函数。比如如下我想要实现如下html&#xff1a; <div id"container"><h1><a hre…