Obviamente, la versión beta de Angular2 es más nueva que nueva, por lo que no hay mucha información disponible, pero estoy tratando de hacer lo que creo que es una ruta bastante básica.
Hackear con el código de inicio rápido y otros fragmentos del sitio web https://angular.io ha dado como resultado la siguiente estructura de archivos:
angular-testapp/
app/
app.component.ts
boot.ts
routing-test.component.ts
index.html
Con los archivos que se rellenan de la siguiente manera:
index.html
<html>
<head>
<base href="/">
<title>Angular 2 QuickStart</title>
<link href="../css/bootstrap.css" rel="stylesheet">
<!-- 1. Load libraries -->
<script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="node_modules/systemjs/dist/system.src.js"></script>
<script src="node_modules/rxjs/bundles/Rx.js"></script>
<script src="node_modules/angular2/bundles/angular2.dev.js"></script>
<script src="node_modules/angular2/bundles/router.dev.js"></script>
<!-- 2. Configure SystemJS -->
<script>
System.config({
packages: {
app: {
format: 'register',
defaultExtension: 'js'
}
}
});
System.import('app/boot')
.then(null, console.error.bind(console));
</script>
</head>
<!-- 3. Display the application -->
<body>
<my-app>Loading...</my-app>
</body>
</html>
boot.ts
import {bootstrap} from 'angular2/platform/browser'
import {ROUTER_PROVIDERS} from 'angular2/router';
import {AppComponent} from './app.component'
bootstrap(AppComponent, [
ROUTER_PROVIDERS
]);
app.component.ts
import {Component} from 'angular2/core';
import {RouteConfig, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, LocationStrategy, HashLocationStrategy} from 'angular2/router';
import {RoutingTestComponent} from './routing-test.component';
@Component({
selector: 'my-app',
template: `
<h1>Component Router</h1>
<a [routerLink]="['RoutingTest']">Routing Test</a>
<router-outlet></router-outlet>
`
})
@RouteConfig([
{path:'/routing-test', name: 'RoutingTest', component: RoutingTestComponent, useAsDefault: true},
])
export class AppComponent { }
routing-test.component.ts
import {Component} from 'angular2/core';
import {Router} from 'angular2/router';
@Component({
template: `
<h2>Routing Test</h2>
<p>Interesting stuff goes here!</p>
`
})
export class RoutingTestComponent { }
Intentar ejecutar este código produce el error:
EXCEPTION: Template parse errors:
Can't bind to 'routerLink' since it isn't a known native property ("
<h1>Component Router</h1>
<a [ERROR ->][routerLink]="['RoutingTest']">Routing Test</a>
<router-outlet></router-outlet>
"): AppComponent@2:11
Encontré un problema vagamente relacionado aquí; directivas de enlace de enrutador rotas después de actualizar a angular2.0.0-beta.0 . Sin embargo, el "ejemplo de trabajo" en una de las respuestas se basa en el código pre-beta, que bien podría funcionar, pero me gustaría saber por qué el código que he creado no funciona.
Cualquier sugerencia sería recibida con gratitud!
directives: [ROUTER_DIRECTIVES]
.@Component({selector: "app"}) @View({templateUrl: "app.html", directives: [ROUTER_DIRECTIVES, RouterLink]})
directives: [ROUTER_DIRECTIVES]
y el cambio de [router-link] a [routerLink] ya no obtengo el error.Respuestas:
> = RC.5
importar el
RouterModule
Ver también https://angular.io/guide/router> = RC.2
app.routes.ts
main.ts
<= RC.1
Falta tu código
No puede usar directivas como
routerLink
orouter-outlet
sin darlas a conocer a su componente.Si bien los nombres de las directivas se cambiaron para distinguir entre mayúsculas y minúsculas en Angular2, los elementos aún se usan
-
en el nombre<router-outlet>
para ser compatibles con las especificaciones de componentes web que requieren un-
nombre en el nombre de los elementos personalizados.registrarse a nivel mundial
Para que esté
ROUTER_DIRECTIVES
disponible globalmente, agregue este proveedor abootstrap(...)
:entonces ya no es necesario agregar
ROUTER_DIRECTIVES
a cada componente.fuente
provide(PLATFORM_DIRECTIVES, {useValue: [ROUTER_DIRECTIVES, FORM_DIRECTIVES, ETC...], multi: true})
FORM_DIRECTIVES
están incluidosPLATFORM_DIRECTIVES
por defecto.Para las personas que encuentran esto cuando intentan ejecutar pruebas porque a través
npm test
ong test
utilizando Karma o cualquier otra cosa. Su módulo .spec necesita una importación de prueba de enrutador especial para poder construir.http://www.kirjai.com/ng2-component-testing-routerlink-routeroutlet/
fuente
spec
archivo que tuve que agregar esto. Gracias @raykrow!RouterModule
, debe llamarforRoot
para satisfacer el módulo y luego debe proporcionar elBASE_HREF
y ...Can't bind to 'active' since it isn't a known property of 'a'.
en varias de las pruebas de mi unidad y he importadoRouterTestingModule
.Palabra de precaución al codificar con Visual Studio (2013)
He perdido 4 a 5 horas tratando de depurar este error. Probé todas las soluciones que encontré en StackOverflow por carta y todavía recibí este error:
Can't bind to 'routerlink' since it isn't a known native property
Tenga en cuenta que Visual Studio tiene el desagradable hábito de autoformatar texto cuando copia / pega código. Siempre obtuve un pequeño ajuste instantáneo de VS13 (el caso del camello desaparece).
Esta:
Se convierte en:
Es una pequeña diferencia, pero suficiente para provocar el error. La parte más fea es que esta pequeña diferencia seguía evitando mi atención cada vez que copiaba y pegaba. Por pura casualidad, vi esta pequeña diferencia y la resolví.
fuente
Para> = V5
componente:
Para <V5
También se puede usar
RouterLink
como undirectives
ie.directives: [RouterLink]
. eso funcionó para mífuente
En general, cada vez que
Can't bind to 'xxx' since it isn't a known native property
aparece un error , la causa más probable es olvidarse de especificar un componente o una directiva (o una constante que contenga el componente o la directiva) en ladirectives
matriz de metadatos. Tal es el caso aquí.Como no especificó
RouterLink
o la constanteROUTER_DIRECTIVES
, que contiene lo siguiente :- en la
directives
matriz, entonces cuando Angular analizano conoce la directiva RouterLink (que usa el selector de atributos
routerLink
). Dado que Angular sabe qué es ela
elemento, se supone que[routerLink]="..."
es un enlace de propiedad para ela
elemento. Pero luego descubre querouterLink
no es una propiedad nativa de losa
elementos, por lo tanto, arroja la excepción sobre la propiedad desconocida.Nunca me ha gustado realmente la ambigüedad de la sintaxis . Es decir, considera
Simplemente mirando el HTML no podemos decir si
whatIsThis
essomething
something
Tenemos que saber cuáles
directives: [...]
se especifican en los metadatos del componente / directiva para interpretar mentalmente el HTML. Y cuando olvidamos poner algo en ladirectives
matriz, creo que esta ambigüedad hace que sea un poco más difícil de depurar.fuente
Tienes en tu modulo
tienes que exportar el módulo RouteModule
ejemplo:
para poder acceder a las funcionalidades para todos los que importan este módulo.
fuente
He probado todos los métodos, que se mencionan anteriormente. Pero ningún método funciona para mí. Finalmente obtuve una solución para el problema anterior y está funcionando para mí.
Probé este método:
En HTML:
En el archivo TS:
fuente
En mi caso, importé el RouterModule en el módulo de la aplicación pero no importé en mi módulo de funciones. Después de importar el módulo de enrutador en mi EventModule, el error desaparece.
fuente
Si obtiene este error durante la prueba de la unidad, escriba esto.
fuente
¡Realmente aprecio la respuesta de @ raykrow cuando uno tiene este problema solo en un archivo de prueba! Ahí es donde lo encontré.
Como a menudo es útil tener otra forma de hacer algo como respaldo, quería mencionar esta técnica que también funciona (en lugar de importar
RouterTestingModule
):(Normalmente, se usaría
routerLink
en un<a>
elemento pero se ajustaría el selector en consecuencia para otros componentes).La segunda razón por la que quería mencionar esta solución alternativa es que, aunque me sirvió bien en varios archivos de especificaciones, me encontré con un problema en un caso:
No pude entender cómo este simulacro y mi
ButtonComponent
estaban usando el mismo selector, por lo que la búsqueda de un enfoque alternativo me llevó aquí a la solución de @ raykrow.fuente
Si usa módulos compartidos, simplemente agregue RouterModule a un Módulo donde se declare su componente y no olvide agregar
<router-outlet></router-outlet>
Referenciado desde aquí RouterLink no funciona
fuente
Mi solución es simple. Estoy usando [href] en lugar de [routerLink]. He probado todas las soluciones para [routerLink]. Ninguno de ellos funciona en mi caso.
Aquí está mi solución:
Luego escriba la
getPlanUrl
función en el archivo TS.fuente