2016-11-13 32 views
0

我正在从RC4升级到2.1.2。我了解ROUTER_DIRECTIVES已弃用。所以在我的LoginComponent现在看起来是这样(SystemJS)无法为Angular 2.1.2中的路由器解析所有参数

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 { } 

然后我得到的错误如下

[email protected]?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使编译器解决路由器问题?

+2

在**删除**'{provide:Router,useClass:RouterModule}'之后,它应该可以工作,因为您已将AppRoutingModule添加到应用模块导入。除此之外,请尝试提供更好的帮助。 –

+0

我没有提供'{provide:Router,useClass:RouterModule}'并且出现错误。然后我看着http://stackoverflow.com/questions/39015918/cant-resolve-all-parameters-for-router-in-angular-rc-5-w并开始添加'{提供:路由器,useClass:RouterModule} '但它也没有帮助。所以通过删除'{提供:路由器,useClass:RouterModule}'我仍然会收到错误。它一定是我可能错过的其他东西? – Shawn

+1

感谢您指出,所以我可以投它:-)这不是一个解决方案。你需要更好地理解DI才能意识到这是一个dufus的想法。就像我所说的,它应该在您将AppRoutingModule导入到应用程序模块后运行。你能否提供一个能够重现问题的Plunker? –

回答

1

只需在AppModule中输入RouterModule.forRoot(routes),并在其他使用路由器的模块中输入RouterModule即可。不要放入组件的提供者,AppRoutingModule似乎也是不必要的。

相关问题