Ho due nidificati @Components
en angular 2. La vista viene visualizzata correttamente ma genera sempre un errore javascript la prima volta. Ecco il mio codice in Typescript.Il selettore Angular2 non corrisponde a nessun elemento nei componenti nidificati
App HTML:
<body>
<my-app>loading...</my-app>
</body>
App Componente:
import {bootstrap, Component} from 'angular2/angular2';
import {CanvasComponent} from "./CanvasComponent";
@Component({
selector: 'my-app',
template: `
<h1>{{title}}</h1>
<h2>My Games</h2>
<div>
<my-canvas></my-canvas>
</div>
`,
directives: [CanvasComponent]
})
class AppComponent {
}
bootstrap(AppComponent);
Tela Componente:
import {bootstrap, Component, View} from 'angular2/angular2';
@Component({
selector: 'my-canvas'
})
@View({
template: `
<div>
<span>Balls:</span>
<div>{{canvas.length}}</div>
</div>
`
})
export class CanvasComponent {
canvas = [1,2,3];
}
bootstrap(CanvasComponent);
L'errore è:
EXCEPTION: The selector "my-canvas" did not match any elements
Ok, ora diciamo che 'CanvasComponent' richiede' HTTP_PROVIDERS' e altri servizi. Come lo inietteresti? Mi sento come se la componente di root dovesse interessare l'iniezione di questi servizi. – Pablo
@Pablo, basta aggiungerlo alla chiamata bootstrap per l'app 'bootstrap (AppComponent, [HTTP_PROVIDERS]);' Quindi aggiungi un costruttore a CanvasComponent con il parametro che hai annotato con '@ Inject', ad es .:' constructor (@Inject (Http) http: Http) pubblico {} ' – svallory
@svallory ringraziamenti, ho completato DI utilizzando la proprietà' providers' all'interno di @Component. Vedi https://github.com/ghpabs/angular2-seed-project/blob/master/src/scripts/todo/todo.component.ts#L12-L17. In questo modo trovo che il componente sia meglio incapsulato. Pensieri? – Pablo