@solar-angular/router 19.3.1 → 19.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,51 +1,79 @@
|
|
|
1
1
|
class BaseRouteReuse {
|
|
2
2
|
constructor() {
|
|
3
|
-
this.handlers = new
|
|
3
|
+
this.handlers = new Map();
|
|
4
4
|
}
|
|
5
5
|
/**
|
|
6
6
|
* 是否缓存离开的路由组件
|
|
7
|
-
* @param route
|
|
8
|
-
* @returns
|
|
9
7
|
*/
|
|
10
8
|
shouldDetach(route) {
|
|
11
9
|
return route.data['reuse'];
|
|
12
10
|
}
|
|
13
11
|
/**
|
|
14
12
|
* 当路由离开时将该组件存入缓存
|
|
15
|
-
* @param route
|
|
16
|
-
* @param handle
|
|
17
13
|
*/
|
|
18
14
|
store(route, handle) {
|
|
19
15
|
if (route.routeConfig) {
|
|
20
|
-
this.handlers.set(route.routeConfig, handle);
|
|
16
|
+
this.handlers.set(route.routeConfig, { handle, snapshot: route });
|
|
21
17
|
}
|
|
22
18
|
}
|
|
23
19
|
/**
|
|
24
20
|
* 是否使用缓存的路由组件
|
|
25
|
-
* @param route
|
|
26
|
-
* @returns
|
|
27
21
|
*/
|
|
28
22
|
shouldAttach(route) {
|
|
29
|
-
|
|
23
|
+
const config = route.routeConfig;
|
|
24
|
+
if (!config || !this.handlers.has(config)) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const cached = this.handlers.get(config);
|
|
28
|
+
// 修改: 只有当 params、queryParams 和 data 完全一致时才允许还原缓存
|
|
29
|
+
return isRouteEqual(route, cached.snapshot);
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
32
|
* 获取缓存的组件
|
|
33
|
-
* @param route
|
|
34
|
-
* @returns
|
|
35
33
|
*/
|
|
36
34
|
retrieve(route) {
|
|
37
|
-
|
|
35
|
+
if (!route.routeConfig)
|
|
36
|
+
return null;
|
|
37
|
+
const cached = this.handlers.get(route.routeConfig);
|
|
38
|
+
return cached ? cached.handle : null;
|
|
38
39
|
}
|
|
39
40
|
/**
|
|
40
41
|
* 判断是否复用当前路由
|
|
41
42
|
* 当导航到相同的路由时,复用当前路由
|
|
42
|
-
*
|
|
43
|
-
* @param curr
|
|
44
|
-
* @returns
|
|
43
|
+
* 但如果 params、queryParams 或 data 发生变化,则不复用
|
|
45
44
|
*/
|
|
46
45
|
shouldReuseRoute(future, curr) {
|
|
47
|
-
|
|
46
|
+
// 修改: 使用增强的对比逻辑
|
|
47
|
+
return isRouteEqual(future, curr);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function isRouteEqual(future, curr) {
|
|
51
|
+
if (future.routeConfig !== curr.routeConfig) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
if (!compareObjects(future.params, curr.params)) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
if (!compareObjects(future.queryParams, curr.queryParams)) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
// if (!compareObjects(future.data, curr.data)) {
|
|
61
|
+
// return false;
|
|
62
|
+
// }
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
function compareObjects(obj1, obj2) {
|
|
66
|
+
const keys1 = Object.keys(obj1);
|
|
67
|
+
const keys2 = Object.keys(obj2);
|
|
68
|
+
if (keys1.length !== keys2.length) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
for (const key of keys1) {
|
|
72
|
+
if (obj1[key] !== obj2[key]) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
48
75
|
}
|
|
76
|
+
return true;
|
|
49
77
|
}
|
|
50
78
|
|
|
51
79
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solar-angular-router.mjs","sources":["../../../packages/router/src/route-reuse-strategy.ts","../../../packages/router/src/solar-angular-router.ts"],"sourcesContent":["import { ActivatedRouteSnapshot, DetachedRouteHandle, Route, RouteReuseStrategy } from '@angular/router';\n\nexport class BaseRouteReuse implements RouteReuseStrategy {\n private handlers = new
|
|
1
|
+
{"version":3,"file":"solar-angular-router.mjs","sources":["../../../packages/router/src/route-reuse-strategy.ts","../../../packages/router/src/solar-angular-router.ts"],"sourcesContent":["import { ActivatedRouteSnapshot, DetachedRouteHandle, Route, RouteReuseStrategy } from '@angular/router';\n\nexport class BaseRouteReuse implements RouteReuseStrategy {\n private handlers = new Map<Route, { handle: DetachedRouteHandle; snapshot: ActivatedRouteSnapshot }>();\n\n /**\n * 是否缓存离开的路由组件\n */\n shouldDetach(route: ActivatedRouteSnapshot): boolean {\n return route.data['reuse'];\n }\n\n /**\n * 当路由离开时将该组件存入缓存\n */\n store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {\n if (route.routeConfig) {\n this.handlers.set(route.routeConfig, { handle, snapshot: route });\n }\n }\n\n /**\n * 是否使用缓存的路由组件\n */\n shouldAttach(route: ActivatedRouteSnapshot): boolean {\n const config = route.routeConfig;\n if (!config || !this.handlers.has(config)) {\n return false;\n }\n\n const cached = this.handlers.get(config)!;\n // 修改: 只有当 params、queryParams 和 data 完全一致时才允许还原缓存\n return isRouteEqual(route, cached.snapshot);\n }\n\n /**\n * 获取缓存的组件\n */\n retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n if (!route.routeConfig) return null;\n const cached = this.handlers.get(route.routeConfig);\n return cached ? cached.handle : null;\n }\n\n /**\n * 判断是否复用当前路由\n * 当导航到相同的路由时,复用当前路由\n * 但如果 params、queryParams 或 data 发生变化,则不复用\n */\n shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n // 修改: 使用增强的对比逻辑\n return isRouteEqual(future, curr);\n }\n\n}\n\nfunction isRouteEqual(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n if (future.routeConfig !== curr.routeConfig) {\n return false;\n }\n\n if (!compareObjects(future.params, curr.params)) {\n return false;\n }\n\n if (!compareObjects(future.queryParams, curr.queryParams)) {\n return false;\n }\n\n // if (!compareObjects(future.data, curr.data)) {\n // return false;\n // }\n\n return true;\n}\n\nfunction compareObjects(obj1: any, obj2: any): boolean {\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n if (obj1[key] !== obj2[key]) {\n return false;\n }\n }\n return true;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"MAEa,cAAc,CAAA;AAA3B,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAA4E;;AAEtG;;AAEG;AACH,IAAA,YAAY,CAAC,KAA6B,EAAA;AACxC,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;AAG5B;;AAEG;IACH,KAAK,CAAC,KAA6B,EAAE,MAA2B,EAAA;AAC9D,QAAA,IAAI,KAAK,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;;AAIrE;;AAEG;AACH,IAAA,YAAY,CAAC,KAA6B,EAAA;AACxC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW;AAChC,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACzC,YAAA,OAAO,KAAK;;QAGd,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAE;;QAEzC,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;;AAG7C;;AAEG;AACH,IAAA,QAAQ,CAAC,KAA6B,EAAA;QACpC,IAAI,CAAC,KAAK,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI;AACnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;QACnD,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI;;AAGtC;;;;AAIG;IACH,gBAAgB,CAAC,MAA8B,EAAE,IAA4B,EAAA;;AAE3E,QAAA,OAAO,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;;AAGpC;AAED,SAAS,YAAY,CAAC,MAA8B,EAAE,IAA4B,EAAA;IAChF,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,EAAE;AAC3C,QAAA,OAAO,KAAK;;AAGd,IAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AAC/C,QAAA,OAAO,KAAK;;AAGd,IAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;AACzD,QAAA,OAAO,KAAK;;;;;AAOd,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,cAAc,CAAC,IAAS,EAAE,IAAS,EAAA;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IAE/B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;AACjC,QAAA,OAAO,KAAK;;AAGd,IAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;QACvB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE;AAC3B,YAAA,OAAO,KAAK;;;AAGhB,IAAA,OAAO,IAAI;AACb;;AC1FA;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -3,34 +3,24 @@ export declare class BaseRouteReuse implements RouteReuseStrategy {
|
|
|
3
3
|
private handlers;
|
|
4
4
|
/**
|
|
5
5
|
* 是否缓存离开的路由组件
|
|
6
|
-
* @param route
|
|
7
|
-
* @returns
|
|
8
6
|
*/
|
|
9
7
|
shouldDetach(route: ActivatedRouteSnapshot): boolean;
|
|
10
8
|
/**
|
|
11
9
|
* 当路由离开时将该组件存入缓存
|
|
12
|
-
* @param route
|
|
13
|
-
* @param handle
|
|
14
10
|
*/
|
|
15
11
|
store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void;
|
|
16
12
|
/**
|
|
17
13
|
* 是否使用缓存的路由组件
|
|
18
|
-
* @param route
|
|
19
|
-
* @returns
|
|
20
14
|
*/
|
|
21
15
|
shouldAttach(route: ActivatedRouteSnapshot): boolean;
|
|
22
16
|
/**
|
|
23
17
|
* 获取缓存的组件
|
|
24
|
-
* @param route
|
|
25
|
-
* @returns
|
|
26
18
|
*/
|
|
27
19
|
retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null;
|
|
28
20
|
/**
|
|
29
21
|
* 判断是否复用当前路由
|
|
30
22
|
* 当导航到相同的路由时,复用当前路由
|
|
31
|
-
*
|
|
32
|
-
* @param curr
|
|
33
|
-
* @returns
|
|
23
|
+
* 但如果 params、queryParams 或 data 发生变化,则不复用
|
|
34
24
|
*/
|
|
35
25
|
shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean;
|
|
36
26
|
}
|