没有路由器供应商?

我得到了这个错误:

例外: ./AppComponent 类 AppComponent-inline 中的错误 模板: 0:0造成: 没有路由器提供商!

这是我的应用程序组件:

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


})
export class AppComponent {


}

我在我的应用程序模块中尝试了这个方法:

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


imports: [
BrowserModule,
FormsModule,
HttpModule,
LoginModule,
RouterModule
],
bootstrap: [AppComponent, RouterModule]

但是我得到了这个错误:

错误: 错误: 在 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 { }

应用程式组件:

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


})
export class AppComponent {


}

然后我有 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']);


}
);


}
}

也许问题出在这一行:

 this.router.navigate(['/home']);

这是我的 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 {
}
131410 次浏览

请使用此模块

RouterModule.forRoot(
[
{ path: "", component: LoginComponent}
]
)

现在只要把你的 <login></login>换成 <router-outlet></router-outlet>就行了

我犯了一个错误

没有路由器提供商

当你试图在 any service.ts中导航时就会发生这种情况

类似于服务中的代码的 this.router.navigate(['/home']);会导致该错误。

您应该处理组件中的导航。例如: 在 login.component

login().subscribe(
(res) => this.router.navigate(['/home']),
(error: any) => this.handleError(error));

当我们是新手的时候,恼人的错误就会发生:)

Babar Bilal 的回答可能在早期的 Angular 2alpha/beta 版本中非常有效。然而,任何用 Angular release v4 + 解决这个问题的人都可以尝试对他的答案做以下修改(将单个路径包装在所需的数组中) :

RouterModule.forRoot([{ path: "", component: LoginComponent}])

这种胎面没有效果“ 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]
})

也可能是有帮助的(花了一些时间来认识到这一点) 可选 路线部分:

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

第二个规则允许像下面这样打开 URL
hostname/test/UI/part1/Details?id=666
还有
hostname/UI/part1/Details?id=666

自2012年以来一直作为前端开发人员工作,但从未陷入像 angular2这样过于复杂的事情(我有3年企业级 ExtJS 的经验)

在我的一个 HTML 标记中有一个 routerLink="."属性导致了这个错误

请按以下方式输入:

从“@顺角/路由器”导入{路由器} ;

我们所犯的错误是-> 从“@angle/Router”导入{ Router } ;

如果您创建了一个单独的模块(例如 AppRoutingModule)来包含您的路由命令,您可能会得到同样的错误:

Error: StaticInjectorError(AppModule)[RouterLinkWithHref -> Router]:
StaticInjectorError(Platform: core)[RouterLinkWithHref -> Router]:
NullInjectorError: No provider for Router!

您可能忘记将其导入到主 AppModule,如下所示:

@NgModule({
imports:      [ BrowserModule, FormsModule, RouterModule, AppRoutingModule ],
declarations: [ AppComponent, Page1Component, Page2Component ],
bootstrap:    [ AppComponent ]
})
export class AppModule { }

在为组件开发自动测试时,我也收到了这个错误。在这方面,应当进行下列工作:

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


const testBedConfiguration = {
imports: [SharedModule,
BrowserAnimationsModule,
RouterTestingModule.withRoutes([]),
],