Ответ 1
Пожалуйста, используйте этот модуль
RouterModule.forRoot(
[
{ path: "", component: LoginComponent}
]
)
теперь просто замените свой <login></login>
на <router-outlet></router-outlet>
thats it
Я получаю эту ошибку:
ИСКЛЮЧЕНИЕ: Ошибка в. /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 {
}
Я пробовал это в своем модуле приложения:
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 { }
app.component:
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 {
}
Пожалуйста, используйте этот модуль
RouterModule.forRoot(
[
{ path: "", component: LoginComponent}
]
)
теперь просто замените свой <login></login>
на <router-outlet></router-outlet>
thats it
Ответ Babar Bilal, скорее всего, отлично справился с предыдущими релизами Angular 2 alpha/beta. Тем не менее, любой, кто решает эту проблему с Угловым выпуском 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 уровня предприятия)
У меня была ошибка
Нет провайдера для маршрутизатора
Это происходит, когда вы пытаетесь перемещаться в any service.ts
this.router.navigate(['/home']);
подобные коды в службах вызывают эту ошибку.
Вы должны обработать навигацию в своих компонентах. например: at login.component
login().subscribe(
(res) => this.router.navigate(['/home']),
(error: any) => this.handleError(error));
Раздражающие ошибки происходят, когда мы новичок :)
У меня был routerLink="."
атрибут в одном из моих тегов HTML, который вызвал эту ошибку
Пожалуйста, сделайте импорт, как показано ниже:
импортировать {Router} из '@angular/Router';
Была допущена ошибка:> импортировать {Router} из '@angular/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([]),
],