Mam dwa zagnieżdżone @Components
pl kątowy 2. Widok renderuje się dobrze, ale zawsze powoduje błąd javascript po raz pierwszy. Oto mój kod w Maszynopisie.Angular2 Selector nie pasuje do żadnego elementu w zagnieżdżonych komponentach
HTML App:
<body>
<my-app>loading...</my-app>
</body>
Komponent aplikacji:
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);
Płótno Składnik:
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);
Błąd jest:
EXCEPTION: The selector "my-canvas" did not match any elements
OK, teraz załóżmy, że 'CanvasComponent' wymaga' HTTP_PROVIDERS' i innych usług. Jak byś to wstrzyknął? Czuję, że komponent główny powinien dbać o wstrzykiwanie tych usług. – Pablo
@Pablo, po prostu dodaj go do wywołania bootstrap dla aplikacji 'bootstrap (AppComponent, [HTTP_PROVIDERS]);' Następnie dodaj konstruktor do CanvasComponent z parametrem, którego potrzebujesz adnotować za pomocą '@ Inject', np .:' constructor (@Inject (Http) public http: Http) {} ' – svallory
@ statystyka dzięki, osiągnąłem DI, używając własności' provider' wewnątrz komponentu @Component. Zobacz https://github.com/ghpabs/angular2-seed-project/blob/master/src/scripts/todo/todo.component.ts#L12-L17. W ten sposób stwierdzam, że komponent jest lepiej hermetyzowany. Myśli? – Pablo