1. ホーム
  2. angularjs

[解決済み] ngInject'を本当に書く必要があるのか?

2022-03-03 09:47:10

質問

現在、コンポーネントベースのアーキテクチャに準拠するようにコードをリファクタリングしています(Angularへのさらなる移行のため)。 本当に 'ngInject' 文字列と $inject を最後に書いてください。

現在の私のコードでは ng-annotate をgulpと一緒に使うことで、minificationのための依存性注入をすべて処理しているように見えます。

   class SecuritySettingsCtrl {
    constructor($scope) {
        'ngInject';
        _self = this;

        _self.$onInit = function () {
            //....
            }

        };
    }

SecuritySettingsCtrl.$inject = ['$scope'];
export default SecuritySettingsCtrl

解決方法は?

ngInject」(正しく設定され、機能している場合)または「.$inject = ...」のいずれかが必要です。 または、エクスポートデフォルト ['$scope', ...] です。

一般的なJavaScriptのミニフィアは、Angularについて何も知らない。そのため、次のようなミニファイを行います。

function ctrl($scope) { $scope.name = 'test'}

を次のように変更します。

function c(a) { a.name = 'test'}

ng-anotate や angularjs-annotate など、好きなプラグインを追加して動作した場合、そのプラグインに ctrl.$inject = ['$scope'] があるので、それを使ってください。

function c(a) { a.name = 'test'}
c.$inject = ['$scope']

minifiedされたアプリが動作する場合 - ngInject(または他の何か)を正しく設定したことになります。

追伸:「ngInject」と手動インジェクションを併用する場合 SecuritySettingsCtrl.$inject 勿論、意味はありません。 minifyされたjsファイル、テスト、実際のアプリで手動で確認することができます。