2つの入れ子になっています@Components
角度2。ビューはうまくレンダリングされますが、最初は常にjavascriptエラーがスローされます。 私のコードはTypescriptです。Angular2セレクタが入れ子になっているコンポーネントのどの要素とも一致しません
アプリのHTML:
<body>
<my-app>loading...</my-app>
</body>
アプリケーションコンポーネント:
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);
キャンバスコンポーネント:
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);
エラーは次のとおりです。
EXCEPTION: The selector "my-canvas" did not match any elements
さて、今のは言わせ 'CanvasComponent'は' HTTP_PROVIDERS'やその他のサービスを必要とします。どのようにそれを注入しますか?ルートコンポーネントがこれらのサービスを注入するのに気を付けるような気がします。 – Pablo
@Pablo、あなたのアプリケーションのブートストラップコールにそれを追加する 'bootstrap(AppComponent、[HTTP_PROVIDERS]);'次に、 '@ Inject'で注釈が必要なパラメータを使ってCanvasComponentにコンストラクタを追加します:' constructor(@Inject (Http)public http:Http){} ' – svallory
@svalloryありがとうございました、私は@Component内部の' providers'プロパティを使ってDIを達成しました。 https://github.com/ghpabs/angular2-seed-project/blob/master/src/scripts/todo/todo.component.ts#L12-L17を参照してください。このようにして、コンポーネントのカプセル化が改善されています。思考? – Pablo