【发布时间】:2016-10-24 13:31:16
【问题描述】:
我想将逻辑从组件转移到服务。但是我发现我无法在服务中获取 routeParams。
我的组件看起来像
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Params } from '@angular/router';
import { MyService } from '../services/my.service';
@Component({
moduleId: module.id,
templateUrl: 'my.component.html',
styleUrls: ['my.component.css']
})
export class MyComponent implements OnInit {
constructor(private myService: MyService, private route: ActivatedRoute) {;}
public ngOnInit() {
this.route.params
.subscribe((params: Params) => {
debugger;
console.log(params);
});
this.myService.getParams()
.subscribe((params: Params) => {
debugger;
console.log('Return1:');
console.log(params);
}, (params: Params) => {
debugger;
console.log('Return2:');
console.log(params);
}, () => {
debugger;
console.log('Return3:');
});
}
};
我的服务看起来像
import { Injectable } from '@angular/core';
import { Params, ActivatedRoute } from '@angular/router';
import { Observable } from 'rxjs';
@Injectable()
export class MyService {
constructor(private route: ActivatedRoute) {;}
public getParams(): Observable<Params> {
this.route.params.subscribe((params: Params) => {
debugger;
console.log('Service1:');
console.log(params);
}, (params: Params) => {
debugger;
console.log('Service2:');
console.log(params);
}, () => {
debugger;
console.log('Service3:');
});
return this.route.params;
}
};
当我调试时,我可以看到参数被填充在组件中并且在服务中为空。结果就是这样
Component:
Object {param: "1"}
Service1:
Object {}
Return1:
Object {}
我正在使用 Angular 2.0.0。为什么组件和服务存在差异?是否可以在服务中获取参数?
【问题讨论】:
-
你尝试过 subscribe 方法的 done 部分吗?
-
我添加了onError和onComplete,但是函数没有执行。我尝试获取参数 3 次。一次直接在组件中,一次直接在服务中,一次在组件中作为服务的返回。而且只有第一次尝试有效。
标签: angular angular2-routing angular2-services