Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.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/6/apache/8.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
Javascript 如何强制路由器更新Angular 2中的当前路由?_Javascript_Html_Angular_Ecmascript 6_Angular2 Routing - Fatal编程技术网

Javascript 如何强制路由器更新Angular 2中的当前路由?

Javascript 如何强制路由器更新Angular 2中的当前路由?,javascript,html,angular,ecmascript-6,angular2-routing,Javascript,Html,Angular,Ecmascript 6,Angular2 Routing,我在angular 2中有一个home组件和一个nav面板组件。当用户单击导航面板(侧栏)上的注销时,通过将路由器登录到控制台,当前url将正确报告为“/login”。当用户再次登录时,导航面板中的路由器实例将当前路由报告为“/登录”,当用户登录后,路由器应将其带到主页。因此,用户永远无法通过登录屏幕,浏览器中的视图和url也不会更新 到目前为止,我尝试了以下方法: 手动清除浏览器缓存并刷新页面(这似乎解决了问题) 在对ngZone.run()的调用中包装router.navigate调用 正在

我在angular 2中有一个home组件和一个nav面板组件。当用户单击导航面板(侧栏)上的注销时,通过将路由器登录到控制台,当前url将正确报告为“/login”。当用户再次登录时,导航面板中的路由器实例将当前路由报告为“/登录”,当用户登录后,路由器应将其带到主页。因此,用户永远无法通过登录屏幕,浏览器中的视图和url也不会更新

到目前为止,我尝试了以下方法:

  • 手动清除浏览器缓存并刷新页面(这似乎解决了问题)
  • 在对ngZone.run()的调用中包装router.navigate调用
  • 正在清除主组件构造函数中Angular 2的模板缓存
  • 以下是代码的一些相关部分: 用户登录后处理导航的方法(在login.component.ts中)

    主零部件的布线:

    {
        path: '',
        pathMatch: 'full',
        component: HomeComponent,
        resolve: { author: RouteAuthorResolver },
        data: {
            panelsectionName: "home"
        }
    },
    
    doLogout() {
        // leave immediately
        this.router.navigate(["/login"]);
    }
    
    导航面板组件中注销方法的一部分:

    {
        path: '',
        pathMatch: 'full',
        component: HomeComponent,
        resolve: { author: RouteAuthorResolver },
        data: {
            panelsectionName: "home"
        }
    },
    
    doLogout() {
        // leave immediately
        this.router.navigate(["/login"]);
    }
    

    假设您正在引导的组件是
    HomeComponent
    ,那么在它的构造函数中检查登录名,否则重定向到登录组件

    constructor(activatedRoute: ActivatedRoute,router:Router){
         if(this.activatedRoute.url !== 'login'){
             if(!userService.geToken()){
                   this.router.navigate(["/login"]);
             }
         }
    }
    

    首先,你要做的应该是有效的。我在Pluralsight上的
    角度布线
    课程中也做了同样的事情。返回路线的值是多少?另外,当使用重定向时,您只需要
    pathMatch
    ,而不需要导航到组件。嗨,黛博拉,谢谢您的帮助。我已将pathMatch从路线中删除,但运气不佳。returnRoute在代码中是这样的:“/Projects”,在url中是这样的:”。@DeborahK我在周末也看了你的课程,我想问题可能是路由的顺序,但它们都在一个模块中,而不是多个模块中。另外一条注释:home组件将当前url报告为“/”导航面板组件将其报告为“/login”,因此导航面板似乎优先于当前的url。您是否可以组合一个plunker来演示此问题,以便我们可以查看更具体的内容?谢谢您的建议,但我也没有任何运气。导航仍然没有出现。