Angular 在更改路由上刷新内容

Angular 在更改路由上刷新内容,angular,typescript,angular-cli,Angular,Typescript,Angular Cli,我有一个Angular CLI应用程序 在应用程序中,我有一张地图(在右侧)和左侧面板(显示路线的当前信息)。如果我点击地图,openlayers会找到最近的功能,并将我重定向到/map/routeID/detail。一切都像charm(在细节组件的TS上,我从API加载数据,如果一切正常的话)。 问题是。。。如果我点击到另一个地方(靠近其他路线)URL会改变(因此我被重定向到其他路线细节)但是信息很旧(来自另一条路线)。我正在用NgOnInit加载,我尝试打印控制台字符串,发现当我的路线从fo

我有一个Angular CLI应用程序

在应用程序中,我有一张地图(在右侧)和左侧面板(显示路线的当前信息)。如果我点击地图,openlayers会找到最近的功能,并将我重定向到/map/routeID/detail。一切都像charm(在细节组件的TS上,我从API加载数据,如果一切正常的话)。 问题是。。。如果我点击到另一个地方(靠近其他路线)URL会改变(因此我被重定向到其他路线细节)但是信息很旧(来自另一条路线)。我正在用NgOnInit加载,我尝试打印控制台字符串,发现当我的路线从fox example/map/1/detail更改为/map/2/detail时,NgOnInit没有被调用


我该怎么办?例如,如果路线发生变化,NgOnInit会再次触发或类似的情况。

我相信您希望观察路线参数的变化,而不是像您的评论那样只获取初始值。为此,您需要订阅
ActivatedRoute
对象上的一个可观察对象(例如
paramMap
),然后运行每次路由更改所需的代码

@Component({...})
class ExampleComponent {
    constructor(private route: ActivatedRoute) {
    }

    ngOnInit() {
        this.route.paramMap.subscribe(map => {
            // run code to process
        });
    }
}

需要注意的是,
paramMap
订阅不需要取消订阅(它会自动为您取消订阅)。

我相信您希望关注路由参数的更改,而不是像您的评论那样只获取初始值。为此,您需要订阅
ActivatedRoute
对象上的一个可观察对象(例如
paramMap
),然后运行每次路由更改所需的代码

@Component({...})
class ExampleComponent {
    constructor(private route: ActivatedRoute) {
    }

    ngOnInit() {
        this.route.paramMap.subscribe(map => {
            // run code to process
        });
    }
}

请注意,
paramMap
订阅不需要取消订阅(它会自动为您取消订阅)。

尝试
ngoonchanges(){this.ngOnInit();}
它也不起作用。
ngOnInit
仅在创建组件时才会触发。当你在那条路线上时,我不相信它会再次触发。你是如何在你的NgOnInit中获得routeID参数的?如果您订阅了
ActivatedRoute
param changes以获得所需的内容,那么您可以使用this.routeId=this.ActivatedRoute.snapshot.params['id'];用于从URL获取路由ID。我怎样才能订阅那个params?在订阅中,我需要调用NgOnInit?请尝试
NgOnInit(){this.NgOnInit();}
它也不起作用。
NgOnInit
仅在创建组件时才会触发。当你在那条路线上时,我不相信它会再次触发。你是如何在你的NgOnInit中获得routeID参数的?如果您订阅了
ActivatedRoute
param changes以获得所需的内容,那么您可以使用this.routeId=this.ActivatedRoute.snapshot.params['id'];用于从URL获取路由ID。我怎样才能订阅那个params?在订阅中我需要打电话给NgOnInit?