我有一个打字稿课,如下:
import { Injectable } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
@Injectable()
export class RouteParamsService {
public router : ActivatedRoute;
constructor(){};
public getRouteParams(){
return this.router;
}
}
我正在组件中使用它,如下所示:
import { ListItem } from "../../../shared/models/listItem.model";
import { RouteParamsService } from '../../../shared/services/routeParams.service';
export class CheckGroupsFilterValues {
private route = new RouteParamsService();
public rgr: string[] = []; //responsibilityGroups
public sys: string[] = []; //systems
public app: string[] = []; //applications
public cgr: string[] = []; //checkGroups
public cgi: string[] = []; //checkGroupInstances
public nat: string; //needsAttentions
constructor(){
this.rgr = ["MULTI_MULTI_Vale_Sellout (4213)"];
this.sys = ["MULTI_MULTI_Vale_Sellout (4213)"];
this.app = ["MULTI_MULTI_Vale_Sellout (4213)"];
this.cgr = ["MULTI_MULTI_Vale_Sellout (4213)"];
this.cgi = ["MULTI_MULTI_Vale_Sellout (4213)"];
console.log(this.route);
}
}
问题是:console.log(this.route)
提供以下输出RouteParamsService {}
。
即使我已经创建了一个实例,该类中定义的公共方法getRouteParams()
也不可见。
答案 0 :(得分:1)
这里有不止一件错误的事情。
1- router
中的RouteParamsService
将始终为undefined
,因为它没有分配到任何地方。需要正确插入constructor
中的in。
constructor(public router : ActivatedRoute){};
2- private route = new RouteParamsService();
不会创建Angular服务。为了将ActivatedRoute
注入服务的构造函数中,它要么必须是Angular服务(可注入),要么必须手动进行。因此,如果您使用new
创建服务,则必须将ActivatedRoute
手动传递给服务。
您可以使用Injector
(https://angular.io/api/core/Injector)在您的自定义类中手动注入注射剂。
更新
要向定制类中注入Angular注入,可以使用Injector
。
首先,从功能模块中导出Injector
的实例(以避免循环依赖),然后将功能模块导入您的应用程序模块中
export let InjectorInstance: Injector;
@NgModule(
/* *** */
)
export class MyFeatureModule {
constructor(private injector: Injector) {
InjectorInstance = this.injector;
}
}
-----
@NgModule(
imports: [
...,
MyFeatureModule,
...
]
)
export class AppModule {}
然后在您的自定义类中,从功能模块中导入InjectorInstance
并使用它来获取可注入的引用:
import {InjectorInstance} from 'path/to/my-feature-module.module';
export class CheckGroupsFilterValues {
private route = InjectorInstance.get<RouteParamsService>(RouteParamsService);
};
不要忘记在root
@Injectable({
providedIn: 'root'
})
export class RouteParamsService {...}
答案 1 :(得分:1)
您需要使路由器通过构造函数
constructor(
private _route: ActivatedRoute, // <-- Usefull
private _router: Router,
){}