如果没有elvis运算符,angular2注入组件构造函数中的路由器错误

时间:2016-05-30 04:31:42

标签: angularjs typescript angular

当我的应用程序启动时,我希望默认显示route / home。 " useAsDefault:true"我使用的Angular 2版本尚未实现路由定义的属性。

为了解决这个问题我想在app.component.ts中做这个(这是你在网上的很多例子中找到的):

export class AppComponent implements OnInit {
  constructor(private _router: Router) {}

  ngOnInit() {
    this._router.navigate(['/home']);
  }
}

但我明白了:

"错误:(29,12)TS2346:提供的参数与呼叫目标的任何签名都不匹配。"

如果我添加Elvis运算符,它可以工作,我不会收到任何错误:

export class AppComponent implements OnInit {
  constructor(private _router?: Router) {}

  ngOnInit() {
    this._router.navigate(['/home']);
  }
}

有人可以帮我理解为什么吗? 我的app.component.ts文件:

import {Component, OnInit} from '@angular/core';
import {Router, Routes, ROUTER_DIRECTIVES } from '@angular/router';
import {NavbarComponent} from "./navbar.component";
import {UsersComponent} from "./users.components";
import {PostsComponent} from "./posts.component";
import {HomeComponent} from "./home.component";

@Component({
    selector: 'my-app',
    templateUrl: 'app/app.component.html',
    directives: [NavbarComponent, ROUTER_DIRECTIVES]
})

@Routes([
  {path: '/home', component: HomeComponent},
  {path: '/users', component: UsersComponent},
  {path: '/posts', component: PostsComponent}
])

export class AppComponent implements OnInit {
  constructor(private _router?: Router) {}

  ngOnInit() {
    this._router.navigate(['/home']);
  }
}

1 个答案:

答案 0 :(得分:1)

  

如果我添加Elvis运算符,它可以正常运行,我没有收到任何错误

轻微:这不称为猫王操作员。它只是表示可选参数的语法(参考https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#3922-parameter-list

  

有人可以帮助我理解为什么

错误Supplied parameters do not match any signature of call target指出某事正在调用构造函数而不提供所有参数。您的问题中没有显示该代码,但您现在知道为什么(当您将参数标记为可选时,出于显而易见的原因,您将该错误静音)