我想將邏輯從組件轉移到服務。但是我發現我無法獲得服務中的routeParams。Angular 2在服務中獲取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;
}
};
當我調試,我可以看到PARAMS填充在組件和服務的空白。這就是結果
Component:
Object {param: "1"}
Service1:
Object {}
Return1:
Object {}
我使用的是Angular 2.0.0。爲什麼組件和服務有所不同?是否有可能在服務中獲得參數?
編輯: https://github.com/angular/angular/issues/11023
您是否嘗試完成訂閱方法的部分? – Lonely
我加了onError和onComplete,但函數沒有執行。我嘗試3次獲得參數。一旦直接在組件中,一次直接在服務中,一次在組件中作爲服務返回。只有第一次嘗試。 –