我想使用ActivatedRoute来获取服务中的路由参数,就像我在组件中一样.但是,当我在Service中注入ActivatedRoute对象时,它包含一个空的params变量
我创建了一个再现行为的plunker:http://plnkr.co/edit/sckmDYnpIlZUbqqB3gli
请注意,目的是使用服务中的参数而不是组件,plunker的设置方式纯粹是为了证明问题.
组件(test已检索):
export class Component implements OnInit {
result: string;
constructor(private route: ActivatedRoute) {
}
ngOnInit() {
this.route.params.subscribe(params => {
this.result = params['test'];
});
}
}
Run Code Online (Sandbox Code Playgroud)
服务(test是未检索):
export class Service {
result: string;
constructor(private route: ActivatedRoute) {
this.getData();
}
getData() {
this.route.params.subscribe(params => {
this.result = params['test'];
});
}
}
Run Code Online (Sandbox Code Playgroud) 当测试需要一个实例时Router,只提供Router自己是不够的:
import {Router} from '@angular/router';
import {it, inject, beforeEachProviders} from '@angular/core/testing';
import {ComponentToTest} from './component.to.test';
describe('ComponentToTest', () => {
beforeEachProviders(() => [
Router,
ComponentToTest
]);
it('should call getData() on contruct', inject([Router], (router) => {
spyOn(ComponentToTest.prototype, 'getData');
expect(ComponentToTest.prototype.getData).not.toHaveBeenCalled();
let component = new ComponentToTest(router);
expect(ComponentToTest.prototype.getData).toHaveBeenCalled();
}));
});
Run Code Online (Sandbox Code Playgroud)
将发生以下错误:
错误:无法解析"路由器"的所有参数(?,?,?,?,?,?).确保所有参数都使用Inject进行修饰或具有有效的类型注释,并且"Router"使用Injectable进行修饰.
但我真的不知道如何解决路由器.
Router 参数在alpha中我们有RootRouter:
import {RootRouter} from 'angular2/src/router/router';.这已经消失,没有任何替代品.
还没有得到如何提供这些的线索.
似乎这个已经在路由器本身中提供了
此参数可能仍由以下提供SpyLocation:
import {SpyLocation} from '@angular/common/testing';
describe('ComponentToTest', () => …Run Code Online (Sandbox Code Playgroud)