Angular中useHash与提供HashLocationStrategy的区别疑问
Angular中useHash: true与手动提供HashLocationStrategy的区别
你的推测完全正确——useHash: true就是Angular为简化配置提供的启用HashLocationStrategy的快捷方式,二者在功能上完全等效。
两种写法示例
- 使用
useHash: true快捷配置:
@NgModule({ imports: [ RouterModule.forRoot(routes, { useHash: true }) ] }) export class AppModule {}
- 手动提供
HashLocationStrategy:
import { HashLocationStrategy, LocationStrategy } from '@angular/common'; @NgModule({ providers: [ { provide: LocationStrategy, useClass: HashLocationStrategy } ], imports: [ RouterModule.forRoot(routes) ] }) export class AppModule {}
底层逻辑说明
当你在RouterModule.forRoot()中设置useHash: true时,Angular路由模块会自动完成以下操作:
- 注册
HashLocationStrategy作为LocationStrategy的实现类 - 配置路由启用哈希模式(URL中带
#分隔符)
简单来说,useHash: true就是把手动配置provider的步骤做了封装,省去了手动导入和声明provider的麻烦,最终运行效果和手动提供策略完全一致。
额外注意点
如果同时使用两种配置(既设置useHash: true又手动声明HashLocationStrategy),不会产生冲突——Angular会优先识别手动配置的provider,但由于两者指向同一策略,功能上不会有任何差异。
内容的提问来源于stack exchange,提问作者skappler
相关产品推荐
相关产品推荐

