没有Router的提供商?

Non*_*one 48 angular

我得到这个错误:

EXCEPTION:./AppComponent类中的错误AppComponent - 内联模板:0:0引起:没有路由器的提供者!

这是我的应用程序组件:

import {Component} from '@angular/core';
import {LoginComponent} from './login/components/login.component';
@Component({
    selector: 'my-app',
    template: '<login></login>',

})
export class AppComponent {

}
Run Code Online (Sandbox Code Playgroud)

我在我的app模块中尝试了这个:

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

  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    LoginModule,
    RouterModule
  ],
  bootstrap: [AppComponent, RouterModule]
Run Code Online (Sandbox Code Playgroud)

但后来我得到这个错误:

错误:错误:在RouterModule上找不到指令注释

我找到了一些例子,但他们使用路由器弃用了,我没有那个文件夹.我需要那个还是什么?任何建议?

更新:

这是我的app.module:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AppComponent } from './app.component';
import { LoginModule } from './login/login.module';
import { RouterModule } from '@angular/router';
//import 'rxjs/Rx';
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    LoginModule,
    RouterModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)

app.component:

import {Component} from '@angular/core';
import {LoginComponent} from './login/components/login.component';
@Component({
    selector: 'my-app',
    template: '<login></login>',

})
export class AppComponent {

}
Run Code Online (Sandbox Code Playgroud)

然后我有login.component:

import {Component, EventEmitter, Input, OnChanges} from '@angular/core';
import {Observable} from 'rxjs/Rx';
import { LoginService } from '../services/login.service';
import { Login } from '../model/login'
import {Router} from '@angular/router';
@Component({
    selector: 'login',
    templateUrl: 'login-form',

})
export class LoginComponent {
  // Constructor with injected service
      constructor(
          private loginService: LoginService,
          private router: Router
          ){}

      submitLogin(values){

          // Variable to hold a reference of addComment/updateComment
             let loginOperation:Observable<any>;
             loginOperation = this.loginService.Login(values);
             loginOperation.subscribe(
                function(response) { console.log("Success Response" + response)},
                function(error) { console.log("Error happened" + error)},
                function() {
                   console.log("the subscription is completed");
                     this.router.navigate(['/About']);

                 }
            );

           }
}
Run Code Online (Sandbox Code Playgroud)

也许问题在于这一行:

 this.router.navigate(['/home']);
Run Code Online (Sandbox Code Playgroud)

这是我的login.module:

import { NgModule }       from '@angular/core';
import { BrowserModule }  from '@angular/platform-browser';
import { FormsModule }    from '@angular/forms';
import { HttpModule, JsonpModule } from '@angular/http';
import { LoginComponent } from './components/login.component';
import { RouterModule } from '@angular/router';

import { LoginService } from './services/login.service';


@NgModule({
  imports: [
    BrowserModule,
    FormsModule,
     HttpModule,
    JsonpModule,
    RouterModule  


  ],
  declarations: [
    LoginComponent
  ],

  providers: [
      LoginService
  ],

  exports:[
    LoginComponent
  ]

})
export class LoginModule {
}
Run Code Online (Sandbox Code Playgroud)

Uma*_*nis 35

请使用此模块

RouterModule.forRoot(
  [
    { path: "", component: LoginComponent}
  ]
)
Run Code Online (Sandbox Code Playgroud)

现在只需更换您<login></login><router-outlet></router-outlet>完蛋了


Ale*_*xei 26

在为组件开发自动测试时,我也收到了这个错误。在这种情况下,应完成以下导入:

import { RouterTestingModule } from "@angular/router/testing";

const testBedConfiguration = {
  imports: [SharedModule,
    BrowserAnimationsModule,
    RouterTestingModule.withRoutes([]),
  ],
Run Code Online (Sandbox Code Playgroud)


Sut*_*onY 18

Babar Bilal的回答可能对早期的Angular 2 alpha/beta版本有效.但是,任何使用Angular版本v4 +解决此问题的人都可能希望尝试对其答案进行以下更改(将所需的数据包装在所需的数组中):

RouterModule.forRoot([{ path: "", component: LoginComponent}])
Run Code Online (Sandbox Code Playgroud)


sne*_*ldy 5

从这个脚步什么都没有。“ forRoot”没有帮助。

抱歉。整理出来。我设法通过为此“ forRoot”路由器设置例程设置正确的“路由”来使其工作

import {RouterModule, Routes} from '@angular/router';    
import {AppComponent} from './app.component';

const appRoutes: Routes = [
  {path: 'UI/part1/Details', component: DetailsComponent}
];

@NgModule({
  declarations: [
    AppComponent,
    DetailsComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    RouterModule.forRoot(appRoutes)
  ],
  providers: [DetailsService],
  bootstrap: [AppComponent]
})
Run Code Online (Sandbox Code Playgroud)

也可能会有所帮助(花一些时间来实现这一点) 可选路线部分:

const appRoutes: Routes = [
   {path: 'UI/part1/Details', component: DetailsComponent},
   {path: ':project/UI/part1/Details', component: DetailsComponent}
];
Run Code Online (Sandbox Code Playgroud)

第二条规则允许打开“ hostname / test / UI / part1 / Details?id = 666”“ hostname / UI / part1 / Details?id = 666”之类的 URL。

自2012年以来一直从事前端开发人员的工作,但从未遇到过诸如Angular2这样复杂的事情(我在企业级ExtJS方面拥有3年的经验)