0

「App.API」というモジュールで定義された角度のセットが、$resource生成されているため触れることができない単一のファイルにあります。(loopback-angularサーバー側のモデル定義から angular $resource を生成するツール)

依存関係を例として取りましょうProduct。アプリの後半で、次のようにそのプロトタイプをオーバーライドしたいと思います。

module('App.NewModule', ['App.API']).run(['Product', function(Product) {
    Product.prototype.getTitle = function() {
        return 'Product name is ' + this.name;
    };
    // From now on I can use p.getTitle() on every Product $resource
});

できます。

問題は、それぞれがモジュールを含む多くの異なるファイルがあり、依存性注入の問題が発生していることです。内部のgetTitle関数にアクセスできますが、他のモジュールのNewModule内部ではアクセスできません。

質問: 依存オブジェクトのプロトタイプをオーバーライドして、他のモジュールで使用できるようにするにはどうすればよいですか?

プロトタイプが変更されると考えて、代わりにこのようにプロトタイプ関数を定義しようとしましProductた。たぶん十分に早くない

module('App.API').run(['Product', function(Product) {
    Product.prototype.getTitle = function() {
        return 'Product name is ' + this.name;
    };
});

機能しません:オブジェクトが正しく注入されている場合でもgetTitle、インスタンスの別のモジュール (依存関係として App.API/Product を使用) で使用すると、エラーProductがスローされます。undefined is not a functionProduct

4

1 に答える 1

0

実際、依存関係の定義/順序を台無しにしました。

私は3つのファイルを持っています:

  1. app.jsモジュール用App(モジュールに依存App.API)
  2. api.jsモジュール用App.API
  3. product.jsProductプロトタイプを含む

質問で述べたように、私はやっていた:

// in product.js
module('App.API').run(['Product', function(Product) { ... }]);

// in app.js
var appModule = module('App', ['App.API']);

しかし、App.APIモジュールは別のファイルで定義されていました。これは、js ローダーで処理して並列ダウンロードを失わない限り、どちらが最初にロードされるかがわからないため、少し混乱しています。

したがって、アプリで宣言する依存関係を追加することを犠牲にして、モジュールと依存関係を明示的に指定しました(ただし、機能し、より安定しています):

// in product.js
module('ApiProduct', ['App.API']).run(['Product', function(Product) { ... }]);

// in app.js
var appModule = module('App', ['App.API', 'ApiProduct']);

注 : 最初の試行では、.config()ブロック内の新しいモジュールでプロトタイプを定義しましたが、App.APIサービスがまだ読み込まれていないためか、機能していませんでした。.run()それが機能し、プロバイダーがgetTitle必要な場所ならどこでもプロトタイプを利用できます。Product

于 2014-06-05T11:46:41.557 に答える