typescript - redireccionar - rutas angular 6
Cómo listar/generar todas las rutas en @Routes en mi aplicación Angular2 (6)
Aparentemente hay una forma muy compacta de hacerlo:
constructor(private router: Router) {}
ngOnInit() {
console.log(''configured routes: '', this.router.config);
}
Tengo una pregunta rápida. Actualmente estoy buscando en https://angular.io/docs/ts/latest/api/router/Router-class.html pero me preguntaba, en main.ts de mi Angular2 tengo mis rutas definidas así:
@Routes([
{ path: ''/'', component: HomeComponent },
{ path: ''/about-me'', component: AboutMeComponent },
{ path: ''/food'', component: FoodComponent },
{ path: ''/photos'', component: PhotosComponent },
{ path: ''/technology'', component: TechnologyComponent },
{ path: ''/blog'', component:Blogomponent },
])
Ahora en un componente en otro lugar importo la clase Router. En mi componente (o la plantilla del componente) me gustaría recorrer todas mis rutas definidas o simplemente poder acceder a ellas. ¿Hay una forma incorporada para hacer esto? ¿Como alguna función que devuelve una matriz de objetos? Aquí hay una idea cruda de lo que quiero ...
@Component({
selector: ''ms-navigation'',
templateUrl: ''src/navigation/navigation.template.html'',
directives: [ ROUTER_DIRECTIVES ]
})
export class NavigationComponent {
constructor(private router:Router) {
// what can I do here to get an array of all my routes?
console.log(router.routes); ????
}
}
Aquí hay una mejor versión que listará todas las rutas posibles:
import { Router, Route } from "@angular/router";
constructor(private router: Router) {
}
ngOnInit() {
this.printpath('''', this.router.config);
}
printpath(parent: String, config: Route[]) {
for (let i = 0; i < config.length; i++) {
let r = config[i];
console.log(parent + ''/'' + r.path);
if (r.children && r.path) {
this.printpath(parent + ''/'' + r.path, r.children);
}
}
}
Para @angular versión 2.00 pude encontrar una lista de los hijos a través de la propiedad routeConfig.
Aquí hay un ejemplo de mi componente. Tenga en cuenta que estoy accediendo a los hijos a través de la propiedad ''padre'', ya que el componente es en realidad uno de los hijos, ya que lo estoy mostrando en la salida del enrutador hijo.
import { Component } from ''@angular/core'';
import {Route, ActivatedRoute, Router} from "@angular/router";
@Component({
selector: ''list'',
template: require(''./list.component.html'')
})
export class ListComponent {
children = new Array<RouteLink>();
constructor(private router: Router, private activatedRoute: ActivatedRoute) {
for (let child of activatedRoute.parent.routeConfig.children) {
if (child.path && child.data["breadcrumb"]) {
this.children.push(new RouteLink(child.path, child.data["breadcrumb"]));
}
}
}
}
export class RouteLink {
constructor(private path: string, private name: string) { }
}
Se encuentra con problemas al usar esta solución si tiene rutas perezosas. Hice un simple comando de bash para mostrar la información de enrutamiento:
cd /path/to/app
for r in $(find src -name "*.routes.ts"); do
echo $r; grep "path:/|component:/|loadChildren:" $r;
done
Si solo necesita las rutas de ruta como cadenas, puede encontrarlas iterando sobre la matriz de config
su objeto Router
.
for (var i = 0; i < this.router.config.length; i++) {
var routePath:string = this.router.config[i].path;
console.log(routePath);
}
si desea ver la ruta disponible importando a un componente.
Asigna tus rutas a una constante como la de abajo.
const appRoutes: Routes = [
{
path: ''asd'',
component: asdComponent
},
{
path: ''ar'',
component: arComponent
}
];
exportar ruta de enrutamiento = RouterModule.forRoot (appRoutes);
Aquí podrás exportar las rutas.
importar el enrutamiento const
import { routing } from ''./app.routing'';
export class AppComponent {
route=routing;
/// route.providers is an array which internally contains the list of routes provided
console.log(route.providers);
}
esto es solo para encontrar las rutas disponibles. No es recomendable implementar la lógica basada en esto.