2

我想在成功的用户验证后定义从我的登录到我的仪表板的重定向。但是当我在我的登录组件中实现“this.router.navigate(['/dashboard'])”时,它给了我错误:“异常:未定义不是一个对象(评估'this.router')”

这是我实现该功能的方式:

export class ContactComponent implements OnInit {
  contactForm: FormGroup;
  errorMsg:string = '';

  constructor(private formBuilder: FormBuilder, private _router: Router) {
            this._router = _router;
          }

  ngOnInit() {
    this.contactForm = this.formBuilder.group({
      username: ['', Validators.required],
      password: ['', Validators.required],
    });
    DBEventProxy.instance(); // Init Eventbus
  }

  submitForm(): void {
    DBEventProxy.instance().dbevent.login(this.contactForm['username'], this.contactForm['password'], this.loggedIn, this.failed);
  }

  loggedIn(): void {
    this._router.navigate(['/dashboard']);
    console.log("success");
    DBEventProxy.instance().dbevent.register("disconnected", function (message) {
      console.log("Client disconnected: " + JSON.stringify(message));
    });
    DBEventProxy.instance().dbevent.register("status", function (message) {
      console.log("Client reconnected: " + JSON.stringify(message));
    });
    DBEventProxy.instance().dbevent.register("routeravailable", function (message) {
      console.log("Router Available: " + JSON.stringify(message));
    });
    DBEventProxy.instance().dbevent.register("routerunavailable", function (message) {
      console.log("Router Unavailable: " + JSON.stringify(message));
    });
    DBEventProxy.instance().dbevent.listen();
    DBEventProxy.instance().dbevent.send({msgtype: "dashboardready"});

  }
failed(message: string): void {
console.log("failed: " + message);


}
}

希望,有人可以帮助我!

更新:当我使用我的登录信息登录时发生错误。我从服务器获得了我的 ConnectReply,并且连接存在。但是重定向不起作用。有多个错误。我将尝试在以下内容中显示这些内容:

  1. 例外:未定义不是对象(评估“this._router”)
  2. 原始堆栈跟踪:(这里有许多文档和句柄错误)
  3. TypeError:未定义不是对象(评估“this._router”)

路线配置:

export const rootRouterConfig: Routes = [
      { path: 'dashboard', component: DashboardComponent },
      { path: 'contact', component: ContactComponent },
      { path: '', redirectTo: '/contact', pathMatch: 'full'}
    ];
4

2 回答 2

3

原始答案

从您的构造函数中删除此行:

this._router = _router;

在 TypeScript 中,当您将构造函数的参数声明为publicorprivate时,将为您设置类属性。

更新

Sounds like是在您不期望this._router的上下文中调用的。thissubmitForm方法中,尝试更改

this.loggedIn

()=>{this.loggedIn()}
于 2017-06-24T16:35:28.627 回答
0

尝试这个

      this._router.navigate(['dashboard']);

n条路线。

  export const rootRouterConfig: Routes = [

  { path: '', component: ContactComponent},
  { path: 'dashboard', component: DashboardComponent },
  { path: 'contact', component: ContactComponent },
  { path: '**', redirectTo: '' }
];
于 2017-06-24T16:34:59.140 回答