angular angular-routing

Enrutamiento en Angular2: el enlace “[''Nombre'']” no se resuelve en una instrucción de terminal



angular-routing (1)

Esto puede ser útil para otros usuarios, así que lo escribo como una respuesta, el comentario puede ser demasiado corto.

En su RouteConfig , definió ChildItem como una ruta principal. La parte /... hace que sea una ruta principal, lo que significa que tiene hijos.

@RouteConfig([ // This route is a parent route { path: ''/child/...'', component: ChildItem, as: ''ChildItem'' } ])

Por lo tanto, no puede simplemente enrutar a [''ChildItem''] sin especificar una ruta secundaria o sin agregar useAsDefault: true en la ruta.

Así que tienes dos opciones :

  • Opción 1 : agregar useAsDefault: true en una de sus rutas secundarias

@RouteConfig([ { path: ''/1'', component: SubItem1, as: ''SubItem1'', useAsDefault: true}, { path: ''/2/'', component: SubItem2, as: ''SubItem2'' }, { path: ''/3/'', component: SubItem3, as: ''SubItem3'' } ]) export class ChildItem{}

Con esta opción, cada vez que navegue a ChildItem lo redireccionará inmediatamente a SubItem1 . Nota : as estaba en desuso alfas, apéguese al name .

  • Opción 2 : especifique un niño en el enlace (puede hacerlo de dos maneras)

// First way <a [routerLink]="[''/ChildItem'', ''SubItem1'']">Click Me</a> // Second way <a [routerLink]="[''/ChildItem/SubItem1'']">Click Me</a>

Ambas formas son similares, pero la primera le permitirá pasar parámetros a cada ruta, por ejemplo:

// ChildItem gets "id" // SubItem1 gets "itemName" <a [routerLink]="[''/ChildItem'', {id: ''someId''}, ''SubItem1'', {itemName: ''someName''}]">Click Me</a> // Only SubItem1 gets "id" <a [routerLink]="[''/ChildItem/SubItem1'', {id: ''someId''}]">Click Me</a>

Espero que esto haya sido útil y claro.

Estoy tratando de obtener una aplicación simple que funcione con enrutamiento infantil.

Cuando configuro las rutas en mi componente secundario, aparece el siguiente mensaje de error:

Link "["ChildItem"]" does not resolve to a terminal instruction

Si coloco todas las rutas en el componente padre, funcionará correctamente. Si divido las rutas entre los componentes principal y secundario, obtengo el error anterior.

Aquí está trabajando con todas las rutas en el mismo componente:

import {bootstrap} from ''angular2/platform/browser''; import {Component, provide} from ''angular2/core''; import {COMMON_DIRECTIVES, CORE_DIRECTIVES, FORM_DIRECTIVES, NgFor, NgIf} from ''angular2/common''; import {ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig, RouterLink, RouterOutlet, Route, LocationStrategy, HashLocationStrategy} from ''angular2/router''; @Component({selector: ''subItem1'',template: `SubItem1`})export class SubItem1{} @Component({selector: ''subItem2'',template: `SubItem2`})export class SubItem2{} @Component({selector: ''subItem3'',template: `SubItem3`})export class SubItem3{} @Component({ selector: ''childItem'', directives: [COMMON_DIRECTIVES, CORE_DIRECTIVES, ROUTER_DIRECTIVES, RouterLink], template: `<h2>Child Item</h2> <ul> <li><a [routerLink]="[''/SubItem1'']">SubItem1</a></li> <li><a [routerLink]="[''/SubItem2'']">SubItem2</a></li> <li><a [routerLink]="[''/SubItem3'']">SubItem3</a></li> </ul> ` }) export class ChildItem{} @Component({ selector: ''home'', directives: [COMMON_DIRECTIVES, CORE_DIRECTIVES, ROUTER_DIRECTIVES, RouterLink], template: `<h2>Home page</h2> <a [routerLink]="[''/ChildItem'']">Click Me</a>` }) export class Home{} @Component({ selector: ''my-app'', template: `<h1>Routing Test</h1> <router-outlet></router-outlet>`, directives: [ROUTER_DIRECTIVES, RouterLink, RouterOutlet] }) @RouteConfig([ { path: ''/'', component: Home, as: ''Home'' }, { path: ''/child'', component: ChildItem, as: ''ChildItem'' }, { path: ''/child/1/'', component: SubItem1, as: ''SubItem1'' }, { path: ''/child/2/'', component: SubItem2, as: ''SubItem2'' }, { path: ''/child/3/'', component: SubItem3, as: ''SubItem3'' } ]) export class AppComponent {} bootstrap(AppComponent, [ROUTER_PROVIDERS, provide(LocationStrategy, { useClass: HashLocationStrategy })])

Aquí están las rutas en componentes separados donde recibo el error cuando veo a Child Compoent:

import {bootstrap} from ''angular2/platform/browser''; import {Component, provide} from ''angular2/core''; import {COMMON_DIRECTIVES, CORE_DIRECTIVES, FORM_DIRECTIVES, NgFor, NgIf} from ''angular2/common''; import {ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig, RouterLink, RouterOutlet, Route, LocationStrategy, HashLocationStrategy} from ''angular2/router''; @Component({selector: ''subItem1'',template: `SubItem1`})export class SubItem1{} @Component({selector: ''subItem2'',template: `SubItem2`})export class SubItem2{} @Component({selector: ''subItem3'',template: `SubItem3`})export class SubItem3{} @Component({ selector: ''childItem'', directives: [COMMON_DIRECTIVES, CORE_DIRECTIVES, ROUTER_DIRECTIVES, RouterLink], template: `<h2>Child Item</h2> <ul> <li><a [routerLink]="[''/SubItem1'']">SubItem1</a></li> <li><a [routerLink]="[''/SubItem2'']">SubItem2</a></li> <li><a [routerLink]="[''/SubItem3'']">SubItem3</a></li> </ul> ` }) @RouteConfig([ { path: ''/1'', component: SubItem1, as: ''SubItem1'' }, { path: ''/2/'', component: SubItem2, as: ''SubItem2'' }, { path: ''/3/'', component: SubItem3, as: ''SubItem3'' } ]) export class ChildItem{} @Component({ selector: ''home'', directives: [COMMON_DIRECTIVES, CORE_DIRECTIVES, ROUTER_DIRECTIVES, RouterLink], template: `<h2>Home page</h2> <a [routerLink]="[''/ChildItem'']">Click Me</a>` }) export class Home{} @Component({ selector: ''my-app'', template: `<h1>Routing Test</h1> <router-outlet></router-outlet>`, directives: [ROUTER_DIRECTIVES, RouterLink, RouterOutlet] }) @RouteConfig([ { path: ''/'', component: Home, as: ''Home'' }, { path: ''/child/...'', component: ChildItem, as: ''ChildItem'' } ]) export class AppComponent {} bootstrap(AppComponent, [ROUTER_PROVIDERS, provide(LocationStrategy, { useClass: HashLocationStrategy })])

Index.html

<html> <head> <title>Child Routing</title> <link rel="stylesheet" href="../node_modules/bootstrap/dist/css/bootstrap.min.css"> <link rel="stylesheet" href="styles.css"> <script src="../node_modules/angular2/bundles/angular2-polyfills.js"></script> <script src="../node_modules/systemjs/dist/system.src.js"></script> <script src="../node_modules/angular2/bundles/angular2.dev.js"></script> <script src="../node_modules/angular2/bundles/router.dev.js"></script> <script src="../node_modules/rxjs/bundles/rx.js"></script> <script> System.config({ packages: {''app'': {defaultExtension: ''js''}}, baseURL: ''/src'' }); System.import(''app/app''); </script> </head> <body> <my-app>Loading...</my-app> </body> </html>

paquetes.json

{ "name": "angular2-forms", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "tsc": "tsc -p src -w", "start": "live-server --open=src" }, "keywords": [], "author": "John Tindell", "license": "ISC", "dependencies": { "angular2": "2.0.0-beta.0", "es6-module-loader": "0.17.8", "systemjs": "0.19.8", "es6-shim":"0.33.3", "rxjs": "5.0.0-beta.0" }, "devDependencies": { "live-server": "^0.9.0", "typescript": "^1.7.3" } }