【发布时间】: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