Как ввести зависимость, используя явную аннотацию в угловых js
Я недавно применял 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
1 ответ
Он хочет что-то похожее на это:
export default angular
.module("profile", ["ui-router"])
.controller("profileCtrl", profileCtrl)
.config(["$translationProvider", ($translateProvider) => {---}]);
согласно документу на этой странице: https://docs.angularjs.org/error/$injector / strictdi "Эта ошибка возникает при попытке вызвать функцию или поставщика, которые не были явно аннотированы, в то время как приложение работает со строго режим ди включен
и вот немного больше объяснений: 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)]
связать представления зависимостей. Это работает, потому что строки не минимизируются.
Второй метод - использовать свойство $inject, которое будет выглядеть так:
export default angular
.module("profile", ["ui-router"])
.controller("profileCtrl", profileCtrl)
.config(($translateProvider) => {---});
profileCtrl.$inject = ["$translationProvider"];
Цель остается той же. Для инъекций зависимости, чтобы пережить процесс минификации.