2016-08-24 142 views
0

我之前发布了一个关于DI的问题,因为我在这里发现了同样的问题。我不知道它是否在做或我的开发设置?注入Angular 2路由器不能正常工作

我试图将路由器注入组件。我含模块看起来像这样

import { NgModule }  from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { FormsModule } from '@angular/forms'; 
import { Router } from '@angular/router'; 

import { LoginComponent } from './login.component'; 

import { User } from '../user/user'; 

@NgModule({ 
    imports:  [ BrowserModule, FormsModule, Router ], 
    declarations: [ LoginComponent ], 
    bootstrap: [ LoginComponent ] 
}) 

export class LoginModule { } 

这是我的组件

import { Component } from '@angular/core'; 
import { Inject } from '@angular/core'; 
import { Router } from '@angular/router'; 

import { User } from '../user/user'; 

@Component({ 
    templateUrl: './login.template.html' 
}) 

export class LoginComponent { 
    user = new User("", ""); 
    submitted:boolean = false; 
    inProgress:boolean = false; 

    constructor (private router : Router) { 

    } 

} 

当我运行的应用程序,我碰到下面的错误

Can't resolve all parameters for LoginComponent 

我的构建过程如下:

run inline-angular-compiler(在实际的js文件中嵌入templateUrl) 运行tsc(将ts转换为js)

我听说运行打印机转换器可能会导致DI问题,但替代方法是什么?

编辑:

我的路由器设置

import { Routes, RouterModule } from '@angular/router'; 

import { AppComponent } from './app.component'; 
import { DashboardComponent } from './dashboard/dashboard.component'; 

import { UserRoutes } from './user/user.routing'; 
import { DashboardRoutes } from './dashboard/dashboard.routing'; 
import { LoginRoutes } from './login/login.routing'; 

const routes: Routes = [ 
    ...UserRoutes, 
    ...DashboardRoutes, 
    ...LoginRoutes, 
    //this needs to redirect to a homepage 
    {path:'', component: DashboardComponent} 
]; 

export const appRoutingProviders: any[] = [ 

]; 

export const routing = RouterModule.forRoot(routes); 
+0

你的路由配置在哪里?你应该将'RouterModule'而不是''Router'导入你的导入。 –

+0

我试图使用router.navigate。所以我不认为导入RouterModule会工作?我有一个标准的路由器设置,但是我把它添加到上面以供参考@MadhuRanjan – mwild

+0

将'Router'添加到'NgModule'中的'imports'肯定是错误的。不要将TypeScript导入与模块导入混淆。您需要在'AppModule'中导入'routing'('RouterModule.forRoot(routes)')。我在你的问题中没有看到这个代码。我也认为你应该在'LoginModule'的'NgModule'中导入'RouterModule'。 –

回答

0

行,所以我做了一些阅读和事实证明,一些打字稿编译器不治疗的角度DI同样的方式,角度建议TSC。我以前一直在使用我自己的构建过程,它使用了不同的类型脚本编译器。

解决方案是将我的构建过程恢复为使用angular推荐的构建过程。一个非常奇怪的问题,很难诊断。

感谢大家的帮助。