Skip to content

Commit 623b5b9

Browse files
committed
feat[ptr]: 异步组件 + 进度条
1 parent aae8a67 commit 623b5b9

7 files changed

Lines changed: 78 additions & 13 deletions

File tree

Vue2/sandboxs/package-lock.json

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Vue2/sandboxs/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"axios": "^1.13.4",
2727
"core-js": "^3.6.5",
2828
"mockjs": "^1.1.0",
29+
"nprogress": "^0.2.0",
2930
"querystring": "^0.2.1",
3031
"vue": "^2.6.11",
3132
"vue-router": "^3.6.5",

Vue2/sandboxs/src/router/routes.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,30 @@
88
// import AdminAction from '../views/Admin/component/AdminAction.vue'
99
// import Loading from '../views/Loading'
1010

11+
import { syncGetComp } from "../utils"
12+
1113
export default [
12-
{ name: "Home", path: "/", component: () => import(/* webpackChunkName: "home" */ "@/views/Home"), }, // 一个对象就是一条匹配规则
13-
{ name: "About", path: "/about", component: () => import(/* webpackChunkName: "about" */"@/views/About"), },
14-
{ name: "Blog", path: "/article", component: () => import(/* webpackChunkName: "blog" */"@/views/Blog"), },
15-
{ name: "CategoryBlog", path: "/article/cate/:categoryId", component: () => import(/* webpackChunkName: "blog" */ "@/views/Blog"), },
16-
{ name: "Message", path: "/message", component: () => import(/* webpackChunkName: "message" */ "@/views/Message"), },
14+
{ name: "Home", path: "/", component: syncGetComp(() => import(/* webpackChunkName: "home" */ "@/views/Home")), }, // 一个对象就是一条匹配规则
15+
{ name: "About", path: "/about", component: syncGetComp(() => import(/* webpackChunkName: "about" */"@/views/About")), },
16+
{ name: "Blog", path: "/article", component: syncGetComp(() => import(/* webpackChunkName: "blog" */"@/views/Blog")), },
17+
{ name: "CategoryBlog", path: "/article/cate/:categoryId", component: syncGetComp(() => import(/* webpackChunkName: "blog" */ "@/views/Blog")), },
18+
{ name: "Message", path: "/message", component: syncGetComp(() => import(/* webpackChunkName: "message" */ "@/views/Message")), },
1719
// { name: "Admin", path: "/admin", component: Admin },
1820
// { name: "AdminHome", path: "/admin/home", component: AdminHome },
1921
// { name: "AdminLogin", path: "/admin/login", component: AdminLogin }
2022
{
2123
name: "Admin",
2224
path: "/admin",
23-
component: () => import(/* webpackChunkName: "admin" */ "@/views/Admin"),
25+
component: syncGetComp(() => import(/* webpackChunkName: "admin" */ "@/views/Admin")),
2426
children: [
25-
{ name: "AdminHome", path: "home", component: () => import(/* webpackChunkName: "adminHome" */ "@/views/Admin/component/Home"), },
26-
{ name: "AdminLogin", path: "login", component: () => import(/* webpackChunkName: "adminLogin" */ "@/views/Admin/component/Login") },
27+
{ name: "AdminHome", path: "home", component: syncGetComp(() => import(/* webpackChunkName: "adminHome" */ "@/views/Admin/component/Home")), },
28+
{ name: "AdminLogin", path: "login", component: syncGetComp(() => import(/* webpackChunkName: "adminLogin" */ "@/views/Admin/component/Login")) },
2729
{
2830
name: "AdminAction", path: "action",
29-
component: () => import(/* webpackChunkName: "adminAction" */ "@/views/Admin/component/AdminAction"),
31+
component: syncGetComp(() => import(/* webpackChunkName: "adminAction" */ "@/views/Admin/component/AdminAction")),
3032
meta: { auth: true } // 挂上额外信息 meta 用于 to 路由鉴权
3133
}
3234
]
3335
},
34-
{ name: "Loading", path: "/loading", component: () => import(/* webpackChunkName: "loading" */ "@/views/Loading"), }
36+
{ name: "Loading", path: "/loading", component: syncGetComp(() => import(/* webpackChunkName: "loading" */ "@/views/Loading")), }
3537
]
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<template>
2+
<h1>动态加载的异步组件</h1>
3+
</template>
4+
5+
<script>
6+
export default {};
7+
</script>

Vue2/sandboxs/src/utils/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export { default as toast } from './toast';
22
export { default as getComponentRootDom } from './getComponentRootDom';
33
export { default as formatDate } from './formatDate'
4-
export { default as delay } from './delay'
4+
export { default as delay } from './delay'
5+
export { default as syncGetComp } from './syncGetComp'
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import delay from './delay'
2+
import { start, done, configure } from "nprogress"
3+
import 'nprogress/nprogress.css'
4+
5+
configure({
6+
tickleSpeed: 16,
7+
showSpinner: false,
8+
})
9+
10+
/**
11+
*
12+
* @param {*} getWay 获取目标组件的执行语句,例如 () => import('./Comp')
13+
* @returns
14+
*/
15+
export default function syncGetComp(getWay) {
16+
return async () => {
17+
console.log('开始加载')
18+
start()
19+
if (process.env.NODE_ENV === 'development') await delay(2000)
20+
// process 正常来说只有 Node.js 有,但是 Vue-cli 自动挂载 var 了
21+
const comp = await getWay()
22+
console.log("加载结束")
23+
done()
24+
return comp
25+
}
26+
}
Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,28 @@
11
<template>
2-
<h1>Talk whatever wanna</h1>
2+
<div>
3+
<h1>Talk whatever wanna</h1>
4+
<SyncComp />
5+
</div>
36
</template>
47

58
<script>
6-
export default {};
9+
// import TestSyncComp from "@/test/TestSyncComp.vue";
10+
// const SyncComp = () => {
11+
// return new Promise((resolve) => {
12+
// setTimeout(async () => {
13+
// // resolve(TestSyncComp);
14+
// // }, 3000);
15+
// })
16+
// });
17+
// };
18+
const SyncComp = async () => {
19+
const res = await import("@/test/TestSyncComp.vue");
20+
return res;
21+
};
22+
23+
export default {
24+
components: {
25+
SyncComp,
26+
},
27+
};
728
</script>

0 commit comments

Comments
 (0)