0

最近ng-strict-di、古いコード ベースを適用したところ、アプリの実行時に警告とエラーが発生しました。たとえば、以下のコードでは

export default angular
    .module("profile", ["ui-router"])
    .controller("profileCtrl", profileCtrl)
    .config(($translateProvider) => {
---
});

$injectエラーを下回っているため、構成を明示的に定義する方法を理解したいです。

function($translateProvider) is not using explicit annotation and cannot be invoked in strict mode
4

1 に答える 1

0

次のようなものが必要です。

export default angular
    .module("profile", ["ui-router"])
    .controller("profileCtrl", profileCtrl)
    .config(["$translationProvider", ($translateProvider) => {---}]);

このページのドキュメントによると: https://docs.angularjs.org/error/ $injector/strictdi "このエラーは、アプリケーションが strict- diモード有効」

ここにもう少し説明があります: http://frontendcollisionblog.com/javascript/angularjs/2015/03/31/something-no-one-tells-you-about-minifying-angularjs-controllers-until-its-too- late.html

明示的な表記法は、コードの縮小プロセスを通じてコードの機能が維持されるように設計されています。JavaScript が縮小されると、注入される依存関係は単一の文字に置き換えられます。そのため、参照が失われます。Angular は、パラメーターが実際に想定されている値を認識できず、エラーをスローします。

この問題を修正するために、Angular は明示的な依存関係の注釈を許可します。文字列の配列を使用する (つまり["$translationProvider", function($translateProvider)]、依存関係の表現を関連付ける)。これは、文字列が縮小されないため機能します。

2 番目の方法は、次のような $inject プロパティを使用することです。

export default angular
    .module("profile", ["ui-router"])
    .controller("profileCtrl", profileCtrl)
    .config(($translateProvider) => {---});
    profileCtrl.$inject = ["$translationProvider"];

目的は同じままです。依存性注入が縮小プロセスを生き残るため。

于 2018-04-07T23:36:13.760 に答える