Angular2

时间:2017-06-24 16:29:49

标签: angular typescript redirect angular-router

我想在用户验证成功后定义从登录到我的信息中心的重定向。但是当我在我的登录组件中实现“this.router.navigate(['/ dashboard'])”时,它给了我错误: “例外:undefined不是一个对象(评估'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. EXCEPTION:undefined不是对象(评估'this._router')
  2. ORIGINAL STACKTRACE :(这里有很多文档和handleErrors)
  3. TypeError:undefined不是对象(评估'this._router')
  4. 路由配置:

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

2 个答案:

答案 0 :(得分:2)

原始答案

从构造函数中删除此行:

this._router = _router;

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

更新

this._router不符合预期的上下文中调用this之类的声音。在submitForm方法中,尝试更改

this.loggedIn

()=>{this.loggedIn()}

答案 1 :(得分:0)

试试这个

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

n路线。

  export const rootRouterConfig: Routes = [

  { path: '', component: ContactComponent},
  { path: 'dashboard', component: DashboardComponent },
  { path: 'contact', component: ContactComponent },
  { path: '**', redirectTo: '' }
];