Angular 角度2:路线参数变化, ;重新加载同一页?
我有一个带有参数的路由,当转到/users/123页时,其中123是调用ngOnInit的参数,我得到我的参数,我调用我的方法得到用户 但是,当我在该页面上单击第二个链接/users/456时,就不再调用ngOnInit(因为该页面已经实例化)。因此,如果没有ngOnInit,我无法获取route参数,也无法调用我的方法来获取用户 如果我转到/users/123,然后转到/home,再转到/users/456,它显然可以工作Angular 角度2:路线参数变化, ;重新加载同一页?,angular,angular2-routing,Angular,Angular2 Routing,我有一个带有参数的路由,当转到/users/123页时,其中123是调用ngOnInit的参数,我得到我的参数,我调用我的方法得到用户 但是,当我在该页面上单击第二个链接/users/456时,就不再调用ngOnInit(因为该页面已经实例化)。因此,如果没有ngOnInit,我无法获取route参数,也无法调用我的方法来获取用户 如果我转到/users/123,然后转到/home,再转到/users/456,它显然可以工作 即使我已经在同一页上,我必须使用什么来确保始终调用获取参数和获取用户的
即使我已经在同一页上,我必须使用什么来确保始终调用获取参数和获取用户的函数?
OnInit
仅在实例化指令时调用一次
对于监视路由参数,请使用ActivatedRoute
constructor(private route: ActivatedRoute) { }
ngOnInit(): void {
this.route.params.forEach((params: Params) => {
console.log(params); // Your params called every change
});
}
别忘了导入:
import { ActivatedRoute, Params } from '@angular/router';
阅读有关OnInit的更多信息:
阅读有关ActivateRoute的更多信息:您可以使用subscriber
route.params
来侦听参数的更改
import { ActivatedRoute } from '@angular/router';
export class DemoPage {
constructor(private _route: ActivatedRoute) { }
ngOnInit() {
this._route.params.forEach(params => {
let userId = params["userId"];
//call your function, like getUserInfo()
})
}
}
好的,对不起,伙计们,我在activatedRoute回调之外给我的get用户打电话 这是正确的:
import { ActivatedRoute } from '@angular/router';
export class DemoPage {
constructor(private _route: ActivatedRoute) { }
ngOnInit() {
this._route.params.forEach(params => {
let userId = params["userId"];
getUserInfo(userId);
});
}
}
我所做的是:
import { ActivatedRoute } from '@angular/router';
export class DemoPage {
constructor(private _route: ActivatedRoute) { }
ngOnInit() {
var userId = "";
this._route.params.forEach(params => {
userId = params["userId"];
});
getUserInfo(userId)
}
}
Params是可观察的。因此,您只需订阅一次可观察对象,每次参数更改时,您都会收到通知
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.route.params
.switchMap((params: Params) => /* load your user e.g. getUser(params['id']) */)
.subscribe(user => this.user = user);
}
您还需要导入ActivatedRoute和参数
import { ActivatedRoute, Params } from '@angular/router';
在我的案例中,此解决方案非常有效: this.ActiveRout.paramMap.subscribe(param=>{
DOCTYPE:number;
this.DOCTYPE = + param.get('DocType');
` and in my page i want to input value to be change by DOCTYPE value that will call
the DocsTypeServ to return the name of DOCUMENT TYPE BY ID (DOCTYPE)`
this.DocsTypeServ.readByID(this.DOCTYPE).subscribe((data: CDocsType[]) => {
this.DocumentType_Value = (data.find(x => x.ID == this.DOCTYPE).NAME).toString();
}
);
})