Ich habe zwei verschachtelte @Components
de eckigen 2. Die Ansicht rendert nur gut, aber es wirft immer ein Javascript Fehler beim ersten Mal. Hier ist mein Code in Typescript.Angular2 Selector hat keine Elemente in verschachtelten Komponenten
App HTML:
<body>
<my-app>loading...</my-app>
</body>
App Komponente:
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);
Leinwand Komponente:
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);
Der Fehler ist:
EXCEPTION: The selector "my-canvas" did not match any elements
Okay, sagen wir mal, 'CanvasComponent' benötigt' HTTP_PROVIDERS' und andere Dienste. Wie würdest du es injizieren? Ich denke, die Root-Komponente sollte sich darum kümmern, diese Dienste zu injizieren. – Pablo
@Pablo, fügen Sie es einfach dem Bootstrap-Aufruf für Ihre App 'bootstrap (AppComponent, [HTTP_PROVIDERS]) hinzu;' Fügen Sie dann CanvasComponent einen Konstruktor hinzu, den Sie mit '@ Inject' annotieren müssen, zB:' constructor (@Inject (Http) öffentliche http: Http) {} ' – svallory
@svallory danke, ich habe DI erreicht, indem ich die' providers'-Eigenschaft innerhalb der @Component verwendet habe. Siehe https://github.com/ghpabs/angular2-seed-project/blob/master/src/scripts/todo/todocomponent.ts#L12-L17. Auf diese Weise finde ich die Komponente besser eingekapselt. Gedanken? – Pablo