Angular14中UrlTree带参构造函数消失?该如何创建实例?
Angular v14中UrlTree带参构造函数的疑问解答
你看到的UrlTree带参构造函数是Angular框架内部实现专用的,对外暴露的类型定义中仅保留了无参构造。这是因为Router模块设计上不推荐直接通过
new UrlTree()的方式创建实例,而是提供了标准化的API来生成UrlTree。官方推荐的正确做法是使用Router服务的
createUrlTree()方法来创建UrlTree实例,示例代码如下:
import { Router } from '@angular/router'; // 在组件或服务中注入Router constructor(private router: Router) {} // 生成UrlTree实例 const urlTree = this.router.createUrlTree(['/target-path'], { queryParams: { page: 1, size: 10 }, fragment: 'top' });
为什么源码里有带参构造却无法直接调用?因为Angular会将很多内部类的构造函数标记为内部使用(通过类型定义隐藏或装饰器标记),目的是隔离内部实现细节,避免用户代码依赖不稳定的内部逻辑。框架自身在处理路由导航等场景时会调用这个带参构造,但不会开放给外部开发者使用。
你当前通过无参构造实例化后手动赋值属性的方式可以临时解决问题,但不推荐长期使用——后续Angular版本可能调整UrlTree的内部属性结构,导致代码兼容性问题。
内容的提问来源于stack exchange,提问作者Flavien Volken
相关产品推荐
相关产品推荐

