Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度2:路线参数变化, ;重新加载同一页?_Angular_Angular2 Routing - Fatal编程技术网

Angular 角度2:路线参数变化, ;重新加载同一页?

Angular 角度2:路线参数变化, ;重新加载同一页?,angular,angular2-routing,Angular,Angular2 Routing,我有一个带有参数的路由,当转到/users/123页时,其中123是调用ngOnInit的参数,我得到我的参数,我调用我的方法得到用户 但是,当我在该页面上单击第二个链接/users/456时,就不再调用ngOnInit(因为该页面已经实例化)。因此,如果没有ngOnInit,我无法获取route参数,也无法调用我的方法来获取用户 如果我转到/users/123,然后转到/home,再转到/users/456,它显然可以工作 即使我已经在同一页上,我必须使用什么来确保始终调用获取参数和获取用户的

我有一个带有参数的路由,当转到/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();
   }
   );
})