我有当前(和简化的)课程:
export class NavigationItem {
constructor(
private router: Router
) {}
navigateTo() { this.router.navigate([this.id]); }
}
我不想在每次声明此类的新实例时都将自己插入路由器。
有办法吗?我想到了
export class NavigationItem {
@Inject(forwardRef(() => Router))
private _router: Router;
constructor() {}
navigateTo() { this.router.navigate([this.id]); }
}
但是它似乎不起作用。任何想法 ?
答案 0 :(得分:3)
您可以创建一个工厂服务来处理NavigationItem
的创建并将它们与Router
连接起来。这是一个NavigationItemFactory
类的示例:
// imports
@Injectable({ providedIn: 'root' })
export class NavigationItemFactory {
constructor(private router: Router) { }
createItem(): NavigationItem {
return new NavigationItem(this.router);
}
}
因为它使用了Angular 6+的providedIn
功能,所以您不需要在模块中声明此工厂类,这使得它可以在项目之间轻松移动。
要在项目中创建这些项目的任何地方,只需依赖NavigationItemFactory
并相应地使用其createItem
函数即可。当然,这仍然是您在项目中需要的依赖项,但至少现在它是对您自己的类型的依赖,而不是Router
本身。