【问题标题】:Angular 2 typescript error when using subscribe function on new router (rc 1)在新路由器上使用订阅功能时出现 Angular 2 打字稿错误(rc 1)
【发布时间】:2016-09-05 08:50:28
【问题描述】:

我正在尝试使用新路由器为我的 Angular 2 应用程序设置身份验证。有人建议尝试以下方法:

constructor (private _router: Router) {} 

ngOnInit(){
  this._router.subscribe(
    next => {
      if (!userIsLoggedInOrWhatever) {
        this._router.navigate(['Login']);
      }
    }
  )    
}

然而,这个问题是这会导致打字稿错误

(app.component.ts(47,22):错误 TS2339:“路由器”类型上不存在属性“订阅”。

这很奇怪,因为documentation 清楚地表明路由器对象确实具有此功能。我可以调用其他函数,例如 router.navigate(['/url'])。你们知道可能是什么问题吗?

【问题讨论】:

    标签: javascript angular angular2-routing


    【解决方案1】:

    新路由器

    constructor(router:Router) {
      router.events.subscribe(event:Event => {
        if(event instanceof NavigationStart) {
        }
        // NavigationEnd
        // NavigationCancel
        // NavigationError
        // RoutesRecognized
      })
    }
    

    原创

    Router 类有一个 EventEmitter changes 你可以订阅:

    ngOnInit(){
      this._router.changes.subscribe(
        next => {
          if (!userIsLoggedInOrWhatever) {
            this._router.navigate(['Login']);
          }
        }
      )    
    }
    

    上一条路线的获取方法见How to detect a route change in Angular 2?(pairwise())

    【讨论】:

    • 您能否提供一个示例,说明如何在 app.ts 中完成此操作,其中还找到了 bootstrap(AppComponent, [ ... ]?我在我的中遇到了许多不同的错误各种尝试在我的 app.ts 中工作:“例外:TypeError:无法读取未定义的属性'更改'”,“例外:路由器没有提供者!”,“angular2-polyfills.min.js:1 未处理的承诺拒绝: ReferenceError: router is not defined", "angular2-polyfills.min.js:1 Unhandled Promise reject: TypeError: Cannot read property 'changes' of undefined"
    • 您使用的是哪个 Angular2 版本?上面的代码适用于 RC.1 @angular/router 但不适用于 @angular/router-deprecated
    • 干得好,但是如何检测以前的路线,应用程序从哪里到哪条路线?
    • pairwise() 运营商应该在这里提供帮助 stackoverflow.com/questions/33520043/…
    猜你喜欢
    • 2016-08-31
    • 2016-09-02
    • 2019-09-17
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    相关资源
    最近更新 更多