J'utilise Angular2 alpha39 et Babel pour transpiler le fichier ES6 JS. Je n'utilise pas TypeScript.
J'ai créé un composant qui s'affiche correctement. J'ai ajouté un routeur-prise au modèle. Lorsque je lance l'application, le message d'erreur suivant s'affiche:
Aucun fournisseur pour le routeur! (RouterOutlet -> Router)
La pile d'appels est:
Voici l'extrait de code:
modèle:
.... // Removed for brevity
<div class="contenttext">
<router-outlet></router-outlet>
</div>
.... // Removed for brevity
Fichier de composant:
import { Component, View, bootstrap, OnInit } from 'angular2/angular2';
import { RouteConfig, RouterOutlet, RouterLink } from 'angular2/router';
import 'reflect-metadata';
import 'winjs';
@Component({
selector: 'dashboard-app'
})
@View({
templateUrl: '../js/dashboard.html',
directives: [ ContentComponent, FamiliesComponent, RouterOutlet, RouterLink ]
})
@RouteConfig([
{ path: '/employees', component: EmployeesComponent, as: 'employees'}
])
class DashboardAppComponent implements OnInit {
constructor() {
}
onInit() {
WinJS.UI.processAll().done(function() {
var splitView = document.querySelector(".splitView").winControl;
new WinJS.UI._WinKeyboard(splitView.paneElement);
})
}
}
bootstrap(DashboardAppComponent);
vous devez utiliser:
j'espère que cela va sûrement vous aider.
après la relance de l'alpha41:
ROUTER_BINDINGS
a été changé avec ROUTER_PROVIDERS
.ROUTER_DIRECTIVES
dans votre propriété directives dans l'annotation du composant.Router-link
s'attend à ce que la valeur soit un tableau de noms de route. pour plus d'informations. se référer ici .pour plus d'informations sur le routage, vous pouvez vous référer à ce tutoriel ici .
(Selon l'alpha-47, tous les crochets du cycle de vie ont été renommés.)
onActivate, onReuse, onDeactivate, canReuse, canDeactivate
À :--
routerOnActivate, routerOnReuse, routerOnDeactivate, routerCanReuse, routerCanDeactivate
router-link
est remplacé par routerLink
et la propriété routeconfig modifiée en:
{path: '/abc', component: ABC, as: 'abc'}
à: {path: '/xyz' , component: XYZ, name: 'xyz'}
Il y a beaucoup de changements dans le routage dans angular2 après que RC certains des points que je vais mentionner ici peuvent aider quelqu'un: -
angular2/router
a été changé avec @angular/router
(vous pouvez aussi utiliser l’ancienne fonctionnalité de routage en utilisant l’importation de @angular/router-deprecated
mais à partir de maintenant, nous devons utiliser @angular/router
).
@RouteConfig
a été changé avec @Routes
.
par exemple :-
@Routes([
{path: '/crisis-center', component: CrisisListComponent},
{path: '/heroes', component: HeroListComponent}
])
routerInjectables
a été renommé en ROUTER_BINDINGS
ROUTER_BINDINGS
A été renommé en ROUTER_PROVIDERS
USE ROUTER_PROVIDERS
ROUTER_PROVIDERS
Est utilisé pour simplifier l'amorçage du routeur.
Il comprend:
RouterRegistry
- la collection d'itinéraires enregistrésLocationStrategy = PathLocationStrategy
- correspond par cheminROUTER_PROVIDERS
Fournit des valeurs par défaut "sane" et devrait être utilisé à moins que vous n'ayez besoin d'une autre route LocationStrategy
.
Changer:
bootstrap(DashboardAppComponent);
To:
bootstrap(DashboardAppComponent, [
ROUTER_PROVIDERS
]);
Sources:
Les alias de route doivent être CamelCase (techniquement PascalCase)
Remarque: cela a déjà été mentionné dans la réponse de Pardeep sous # 3
Si vous souhaitez inclure un lien vers une route dans votre modèle via router-link
, Vous devez vous assurer que l'alias (c'est-à-dire la propriété name
de la route) est PascalCase.
Si vous utilisez l'intention d'utiliser router-link
, Modifiez l'itinéraire pour:
{ path: '/employees', component: EmployeesComponent, name: 'Employees'}
Ensuite, vous pouvez ajouter le lien dans votre modèle avec:
<a [router-link]="['/Employees']">Employees Link</a>
RouterLink
insère dynamiquement un href correspondant au chemin de la route.
Remarque: lors de la lecture du numéro/pr, il apparaît que cette modification a été apportée pour empêcher les utilisateurs de confondre la liaison <route-link>
Avec l'URL de la route
Sources:
Astuce:
Si vous voulez simplifier vos directives de vue, utilisez ROUTER_DIRECTIVES
Il comprend:
RouterLink
RouterOutlet
Mise à jour:
Dans un avenir proche, RouterOutlet
/<router-outlet>
Sera renommé en RouterViewport
/<router-viewport>
Source:
Mise à jour 2:
RouteConfig
as
a été renommée en name
.Source:
Réponse le 23 décembre 2016 (Angular v2.4.1, Routeur v3.4.1 - devrait fonctionner pour tout NG v2. xx + routeur v3.xx)
Je viens de migrer trois de nos applications depuis Webpack Starter Seed vers ) une interface de ligne de commande angulaire (v1.0.0-beta.24 ) et cliquez sur ce problème.
Seule une infime fraction de ce qui se trouve sur le NG 2 page massive page doc de routeur) est requise:
Un fichier app-routing.module.ts (généralement dans src/app/folder) ressemblant à cet exemple:
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
const appRoutes: Routes = [
{ path: '', component: YourHomePageComponent },
{ path: 'next-page', component: NextComponent }
];
@NgModule({
imports: [
RouterModule.forRoot(appRoutes)
],
exports: [
RouterModule
]
})
export class AppRoutingModule {}
Importez AppRoutingModule dans votre module principal (généralement src/app/app.module.ts):
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
AppRoutingModule // <--- The import you need to add
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Assurez-vous d'avoir <router-outlet></router-outlet>
quelque part dans votre code HTML principal (souvent src/app/app.component.html), car c’est là que le contenu du routeur est injecté.
Assurez-vous que le routeur est défini et déclaré dans AppModule. Exemple (regardez partout où le routage est mentionné, ignorez le reste):
app.routing.ts
import { ModuleWithProviders } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HeroesComponent } from './heroes.component';
import {DashboardComponent} from './dashboard.component';
import {HeroDetailComponent} from './hero-detail.component';
const appRoutes: Routes = [
{
path: 'heroes',
component: HeroesComponent
},
{
path: 'dashboard',
component: DashboardComponent
},
{
path: '',
redirectTo: '/dashboard',
pathMatch: 'full'
},
{
path: 'detail/:id',
component: HeroDetailComponent
},
];
export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);
et app.module.ts:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
// Imports for loading & configuring the in-memory web api
import { InMemoryWebApiModule } from 'angular-in-memory-web-api';
import { AppComponent } from './app.component';
import { DashboardComponent } from './dashboard.component';
import { HeroesComponent } from './heroes.component';
import { HeroDetailComponent } from './hero-detail.component';
import { HeroService } from './hero.service';
import { routing } from './app.routing';
import './rxjs-extensions';
import {HeroSearchComponent} from './hero-search.component';
@NgModule({
imports: [
BrowserModule,
FormsModule,
HttpModule,
routing
],
declarations: [
AppComponent,
DashboardComponent,
HeroDetailComponent,
HeroesComponent,
HeroSearchComponent
],
providers: [
HeroService,
],
bootstrap: [ AppComponent ]
})
export class AppModule {
}
Vous ne pouvez pas utiliser l’Injection de dépendance pour Router
si vous ne définissez aucun itinéraire! Pour définir l’utilisateur de la route, quelque chose de similaire aux codes suivants:
const loginRoutes: Routes = [
{path: 'foo/bar/baz', component: 'MyRootComponent'}
];
@NgModule({
imports: [
BrowserModule,
FormsModule,
HttpModule,
JsonpModule,
RouterModule.forRoot(loginRoutes)
],
providers: [],
declarations: [
MyLoginComponent
],
bootstrap: [
MyLoginComponent
]
})
export class MyLoginModule
{
}
Cela peut sauver quelqu'un une heure:
Vous obtenez cette erreur si vous n'utilisez même pas le routage (par exemple temporaire, vous n'importez peut-être pas la configuration de routage et les commentaires de routeur-sortie sont commentés) MAIS vous utilisez Router ou ActivatedRoute dans un constructeur de composant via l'injection de dépendance, comme ceci :
@Component({...}})
export class SomeComponent {
constructor(private _router: Router, private _route: ActivatedRoute) {
//may be you are not using _route/_route at the moment at all!
}
...
}