私はAngular 2とTypeScriptが初めてで、ベストプラクティスに従っています。TypeScriptを使用してAngular 2コンポーネントでモデルクラスを宣言するにはどうすればよいですか?
単純なJavaScriptモデル({})を使用する代わりに、TypeScriptクラスを作成しようとしています。
しかし、角2はそれを好まないようです。
import { Component, Input } from "@angular/core";
@Component({
selector: "testWidget",
template: "<div>This is a test and {{model.param1}} is my param.</div>"
})
export class testWidget {
constructor(private model: Model) {}
}
class Model {
param1: string;
}
と私はそれを使用しています:
私のコードがある
例外::私は角度からのエラーを取得しています
import { testWidget} from "lib/testWidget"; @Component({ selector: "myComponent", template: "<testWidget></testWidget>", directives: [testWidget] })
することはできませんtestWidget:(?)のすべてのパラメータを解決します。
私はモデルがまだ定義されていないと思った...私はそれを上に移動します!今除き
私は例外を取得:
元の例外:モデルなしのプロバイダ!
これをどのようにして達成できますか?
編集:すべての回答に感謝します。それは私を正しい道に導いた。
これをコンストラクタに挿入するには、コンポーネントのプロバイダに追加する必要があります。
これが動作するように表示されます:あなたのケースで
import { Component, Input } from "@angular/core";
class Model {
param1: string;
}
@Component({
selector: "testWidget",
template: "<div>This is a test and {{model.param1}} is my param.</div>",
providers: [Model]
})
export class testWidget {
constructor(private model: Model) {}
}
、 reto –
興味深い...コンストラクタ(私的モデル:モデル)の略語を試してみると、No Providerというエラーが出ます。しかし、それを私的モデルと定義すると、Model = new Model()、それが動作します。どうしてこれなの? – Scottie
私はAngular 2のアーキテクトではありませんが、Angularを使った私の経験に基づいて、コンストラクタを通して何かを持ってくると、それが注入されていることを暗示しています。注入するには、それを@Componentに 'Providers:[Model]'のようなプロバイダとして追加する必要があります。また、Anger 2 Tour of Heroのデモでは、通常、サービスのようなより複雑なクラスのために予約されているため、注射機能の代わりにプロパティとして使用する必要があります。 –