【问题标题】:(SystemJS) Can't resolve all parameters for Router in Angular 2.1.2(SystemJS)无法解析 Angular 2.1.2 中路由器的所有参数
【发布时间】:2017-03-27 13:36:00
【问题描述】:

我正在从 RC4 升级到 2.1.2。我知道 ROUTER_DIRECTIVES 已被弃用。所以在我的 LoginComponent 现在看起来像这样

import {Component,Injectable} from '@angular/core';
import {Router,RouterModule} from '@angular/router';
import {FormBuilder, Validators, FormGroup, FormsModule} from '@angular/forms';
import {AuthService} from './auth.service';

@Component({
  selector: 'login',
  templateUrl: 'app/login/auth.login.html',
  styleUrls:  ['app/login/auth.login.css'],
  providers: [FormBuilder, AuthService, { provide: Router, useClass: RouterModule} ]
})
@Injectable()
export class LoginComponent {
  form: FormGroup;

  constructor(fb: FormBuilder, 
              private authSvc: AuthService, 
              private router: Router
              ) {....}

在 app.routing.module.ts 我有

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],
  providers: [ AuthGuard,  ]
})
export class AppRoutingModule { }

然后我得到如下错误

zone.js@0.6.26?main=browser:232 Error: (SystemJS) Can't resolve all parameters for Router: (?, ?, ?, ?, ?, ?, ?, ?).(…)

我尝试将 { provide: Router, useClass: RouterModule} 移至 app.routing.module.ts 但没有帮助。

在 RC4 中,我们在根组件中使用了 directives: [ROUTER_DIRECTIVES],一切都得到了妥善处理。如何使用 RouterModule 使 Router 被编译器解析?

【问题讨论】:

  • 在你 删除 { provide: Router, useClass: RouterModule} 它应该可以工作,因为你将AppRoutingModule 添加到应用程序模块导入中。除此之外,请尝试提供 Plunker 以获得更好的帮助。
  • 我开始时没有{ provide: Router, useClass: RouterModule} 并得到了错误。然后我查看了stackoverflow.com/questions/39015918/… 并开始添加{ provide: Router, useClass: RouterModule},但它也没有帮助。因此,通过删除 { provide: Router, useClass: RouterModule} 我仍然会收到错误消息。这一定是我可能错过的其他东西?
  • 感谢您指出这一点,所以我可以否决它:-) 这不是一个解决方案。您需要对 DI 有更好的了解才能意识到这是一个愚蠢的想法。就像我说的,一旦将 AppRoutingModule 导入应用程序模块,它应该可以工作。你能提供一个能重现问题的 Plunker 吗?
  • 我认为你是对的。我删除了它,错误消失了。谢谢:)

标签: angular typescript angular2-routing


【解决方案1】:

只需在 AppModule 中导入 RouterModule.forRoot(routes),在其他模块中使用 Router 导入 RouterModule。不要放入组件的提供者中,AppRoutingModule 似乎也没有必要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2017-03-23
    • 2015-08-19
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多