@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 WeakMap();
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
- return route.routeConfig ? this.handlers.has(route.routeConfig) : false;
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
- return route.routeConfig ? this.handlers.get(route.routeConfig) ?? null : null;
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
- * @param future
43
- * @param curr
44
- * @returns
43
+ * 但如果 params、queryParams 或 data 发生变化,则不复用
45
44
  */
46
45
  shouldReuseRoute(future, curr) {
47
- return future.routeConfig === curr.routeConfig;
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 WeakMap<Route, DetachedRouteHandle>();\n\n /**\n * 是否缓存离开的路由组件\n * @param route\n * @returns\n */\n shouldDetach(route: ActivatedRouteSnapshot): boolean {\n return route.data['reuse'];\n }\n\n /**\n * 当路由离开时将该组件存入缓存\n * @param route\n * @param handle\n */\n store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {\n if (route.routeConfig) {\n this.handlers.set(route.routeConfig, handle);\n }\n }\n\n /**\n * 是否使用缓存的路由组件\n * @param route\n * @returns\n */\n shouldAttach(route: ActivatedRouteSnapshot): boolean {\n return route.routeConfig ? this.handlers.has(route.routeConfig) : false;\n }\n\n /**\n * 获取缓存的组件\n * @param route\n * @returns\n */\n retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n return route.routeConfig ? this.handlers.get(route.routeConfig) ?? null : null;\n }\n\n /**\n * 判断是否复用当前路由\n * 当导航到相同的路由时,复用当前路由\n * @param future\n * @param curr\n * @returns\n */\n shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n return future.routeConfig === curr.routeConfig;\n }\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,OAAO,EAA8B;;AAE5D;;;;AAIG;AACH,IAAA,YAAY,CAAC,KAA6B,EAAA;AACxC,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;AAG5B;;;;AAIG;IACH,KAAK,CAAC,KAA6B,EAAE,MAA2B,EAAA;AAC9D,QAAA,IAAI,KAAK,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;;;AAIhD;;;;AAIG;AACH,IAAA,YAAY,CAAC,KAA6B,EAAA;QACxC,OAAO,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,KAAK;;AAGzE;;;;AAIG;AACH,IAAA,QAAQ,CAAC,KAA6B,EAAA;QACpC,OAAO,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,GAAG,IAAI;;AAGhF;;;;;;AAMG;IACH,gBAAgB,CAAC,MAA8B,EAAE,IAA4B,EAAA;AAC3E,QAAA,OAAO,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;;AAEjD;;ACrDD;;AAEG;;;;"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solar-angular/router",
3
- "version": "19.3.1",
3
+ "version": "19.3.3",
4
4
  "sideEffects": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -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
- * @param future
32
- * @param curr
33
- * @returns
23
+ * 但如果 params、queryParams 或 data 发生变化,则不复用
34
24
  */
35
25
  shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean;
36
26
  }