16

現在、Angular 2.0 (リリース バージョン) で新しいプロジェクトを開始しており、いくつかのグローバル データ モデル/スキーマを定義したいと考えています。私が理解しているように、Angular 2 には次のような純粋なデータ クラスを処理するデフォルトの方法がありません。

export class TestModel {
  id: number;
  name: string;
  randomAttribute: number;
  author: string;
}

ベスト プラクティスに関する私の最初の質問は、Angular 2 で作業するときにそのようなクラスを定義する必要があるかどうかです。

私のアプリケーション全体のデザインとコンセプトには必要だと思いますが、ここで間違った考え方を適用しているかどうかはわかりません。

このデータ クラスは、複数のモジュール ( ngModule ) で必要になる場合があるため、2 番目の質問は、アプリのどこに配置すればよいですか? 現在、私は次の構造を持っています:

/app
   /shared
      shared.module.ts
      test.model.ts
   /module1
      module1.module.ts
      foo.component.ts
      [...]
   /module2
      module2.module.ts
      bar.component.ts
      [...]
   app.module.ts
   [...]

私が最初に考えたのは、 を に含め、instruction.model.tsshared.moduleインポートするすべてのモジュールにエクスポートすることshared.moduleでした。モデルがディレクティブ、パイプ、またはモジュールではないため、うまくいかないようです。とにかくそれをエクスポートする方法はありますか?

test.model.tsより簡単な解決策は、ファイルと、それを必要とするすべてのモジュールの他のすべての共有モデルを直接インポートすることです。しかし、これは扱いにくく、複数のモデルには不便です。

私が考えた 3 番目の解決策は、すべての共有データ モデルを別のフォルダーに配置し、それらのエクスポートを以下のような 1 つのファイルにまとめて、このファイルを必要とするすべてのモジュールにインポートすることでした。

4

2 に答える 2

27

そのため、1 か月後、自信を持ってこの質問に答え、上記の問題のいくつかを解決するために使用した方法を共有します。それらのほとんどは、Typescript と Angular2 のインポートとエクスポートの私の側の誤解、または単に設計上の決定から生じました。

TL;DR : はい、モデル クラスは役に立ちます。それらを配置する場所はアプリと好みによって異なりますが、インポートの絶対パスが役立ちます。質問の他のすべては、実際には問題ではありません。

ベスト プラクティスに関する私の最初の質問は、Angular 2 で作業するときにそのようなクラスを定義する必要があるかどうかです。

Angular2 を採用する前は、AngularJS や JavaScript フレームワークを使用したことはありませんでしたが、Laravel などの PHP フレームワークの従来の MVC パターンには慣れていました。ですから、ここからこの質問が生まれました。私にとっての答えはイエスです。型は Typescript の大きな利点であり、データ モデルのクラスまたは型を定義すると、アプリの一貫性を保つのに役立ち、IDE でオートコンプリートが提供され、失敗したときに typescript コンパイラが通知してくれます。さらに、このクラスは、バックエンドのリレーショナル データベースとの一貫性を強化します。それでも、これらのモデル クラスはオプションであり、それらを使用するかどうかは設計上の決定であるか、個人的な意見と見なすことさえできます。

2 番目の質問は、アプリのどこに配置すればよいですか?

@ Sam5487 が彼の回答で指摘したように、このクラスは、JavaScript のほぼすべてのものと同様に、単なる変数またはオブジェクトです。したがって、それらをインポートするには、グローバルにアクセスできるようにimport {SomeDumbModel} from '../../../modelfolder'し、アプリのどこかにインポートするために使用する必要があります。もちろん、これはアプリ内のどの位置からでも機能しますが、この相対パスは非常に長くて扱いにくいものになる可能性があります。したがって、本当の質問は次のとおりです。インポートに絶対パスを使用できますか? . 少なくともangular-cli、 webpack 、およびtypescriptでは、答えはyesです。SystemJS またはその他のセットアップの解決策がわかりません。どこにでもインポートするときに参照できるアプリのルートにフォルダーを作成しました。/models@models/

私が最初に考えたのは、instruction.model.ts を shared.module に含め、shared.module をインポートするすべてのモジュールでそれをエクスポートすることでした。モデルがディレクティブ、パイプ、またはモジュールではないため、うまくいかないようです。とにかくそれをエクスポートする方法はありますか?

残りの質問は、Typescript と Angular2 でのインポートとエクスポートに関する私の誤解に基づいています。モジュールとそのエクスポートに関するすべてのことはここでは問題ではなく、まったく異なる問題にとって重要です。他のすべては今までに答えられるべきです。

于 2016-11-15T11:45:19.617 に答える