У меня есть довольно простое приложение Angular, которое отлично работает на моей машине разработчика, но после его развертывания выдает это сообщение об ошибке (в консоли браузера):
Uncaught Error: [$injector:unpr] http://errors.angularjs.org/undefined/$injector/unpr?p0=tProvider%20%3C-%20t%20%3C-%20%24http%20%3C-%20%24compile
Никакого другого сообщения, кроме этого. Это происходит при первой загрузке страницы.
Я запускаю ASP.NET MVC5, Angular 1.2RC3 и отправляю в Azure через git.
Гугл ничего интересного не обнаружил.
Какие-либо предложения?
РЕДАКТИРОВАТЬ:
Я использую TypeScript и определяю свои зависимости с помощью $inject
переменной, например:
export class DashboardCtrl {
public static $inject = [
'$scope',
'$location',
'dashboardStorage'
];
constructor(
private $scope: IDashboardScope,
private $location: ng.ILocationService,
private storage: IDashboardStorage) {
}
}
Я считаю, что это должно (или предназначено) обойти проблемы с переименованием локальных переменных, которые возникают во время минификации и могут вызвать эту ошибку.
Тем не менее, это явно имеет какое-то отношение к процессу минификации, поскольку, когда я устанавливаю BundleTable.EnableOptimizations = true
на своей машине разработчика, я могу воспроизвести его.
$inject
общедоступную переменную, которая, как мне кажется, эквивалентна предложенному вами способу (см. Docs.angularjs.org/guide/di ). Я обновлю свой вопрос.BundleTable.EnableOptimizations = true;
), я могу воспроизвести проблему. Продолжаем смотреть.Я столкнулся с той же проблемой, но мои определения контроллера выглядели немного иначе, чем указано выше. Для контроллеров, определенных таким образом:
Просто добавьте строку после объявления, указывающую, какие объекты вводить при создании экземпляра контроллера:
Это делает его безопасным для минификации.
источник
Эта проблема возникает, когда контроллер или директива не указаны как массив зависимостей и функции. Например
При уменьшении "$ scope", переданный в функцию контроллера, заменяется однобуквенным именем переменной. Это приведет к тому, что angular не будет знать о зависимости. Чтобы избежать этого, передайте имя зависимости вместе с функцией в виде массива.
источник
Если у вас есть отдельные файлы для angular app \ resources \ директив и прочего, вы можете просто отключить минификацию вашего пакета angular app следующим образом (используйте new Bundle () вместо ScriptBundle () в файле конфигурации вашего пакета):
И приложение angular появится в комплекте без изменений.
источник
Если у вас есть отдельные файлы для angular app \ resources \ директив и прочего, вы можете просто отключить минификацию вашего пакета angular app следующим образом (используйте new Bundle () вместо ScriptBundle () в файле конфигурации вашего пакета):
источник
Добавьте службы $ http, $ scope в функцию контроллера, иногда, если они отсутствуют, возникают эти ошибки.
источник
У меня была та же проблема, но проблема была в другой, я пытался создать службу и передать ей $ scope в качестве параметра.
Это еще один способ получить эту ошибку, как говорится в документации по этой ссылке:
источник