1

私はAngularJS v1.2.16を使用しています

私は3つのAngularプロジェクト、1つのアプリケーションと2つのコンポーネントを持っています。3つすべてがrequirejsを介して個別に構成されています。ここで、これら 3 つのプロジェクトのそれぞれのメインの js ファイルについて説明します。

app.js - メイン アプリケーション ファイル

var registeredDependencies = ['myapp.ctrls','myapp.services','myapp.commons','comp1.main','comp2.main'];

var buildValidDependencies = function() {
    var validDependencies = angular.copy(registeredDependencies);
    _.each(validDependencies, function(dep) {
        try {
            setTimeout(function() {
                angular.module(dep);
            });
        } catch (e) {
            var index = validDependencies.indexOf(dep);
            validDependencies.splice(index, 1);
            console.log("'" + dep + "' removed as it failed the existence test.");
        }
    });
    return validDependencies;
};

angular.module('myapp.main', buildValidDependencies());

comp1.js - app.js で使用されるウィジェット 1

angular.module('comp1.main', []);

comp2.js - app.js で使用されるウィジェット 2

angular.module('comp2.main', []);

comp1 と comp2 は両方とも「myapp.commons」を使用しますが、アプリケーションのメイン モジュール「myapp.main」が 3 つのモジュール「myapp.commons」、「comp1.main」すべてを注入するため、comp1.main および comp2.main モジュールには明示的に注入されません。 ','comp2.main' であるため、コモンズは暗黙的に comp1 と comp2 で使用できます。3 つの異なる場所での requirejs 構成を避けるために、comp1 と comp2 にコモンを挿入したくありません。

本当の問題は... comp1 と comp2 はオプションのコンポーネントです。実行時にいずれかが存在しない場合でも、アプリケーションは実行されているはずです。まさにこの目的のために、私の buildValidDependencies() 関数は、アプリケーションのメイン モジュールにモジュールを挿入する前に、モジュールの存在を確認します。angular.module(dependency) を期待していますが、これを確認するには十分です。私のローカル マシンでは正常に動作しますが、comp1.js と comp2.js が CDN からダウンロードされる本番環境では失敗します。タイミングの問題があることがわかったので、このコードを setTimeout() 関数内にラップしました。これは今日までうまくいったようです。ただし、今日、対応するモジュールが存在しなくても angular.module(dep) が失敗することはなく、これは setTimeout() が原因であることがわかりました。

この突然の変化を見つけることができないため、このアプローチが本当に適切かどうか疑問に思っています。何が間違っているのか、または存在しないモジュールをメインモジュールに挿入する前に削除する信頼できる方法を提案してもらえますか?

4

0 に答える 0