У меня довольно простой угловой приложение, которое работает просто отлично на моем компьютере dev, но терпит неудачу с этим сообщением об ошибке (в консоли браузера) после того, как я развернуть его:
Непойманные ошибка: [$инжектор:неустойчивых] http://errors.angularjs.org/undefined/$injector/unpr?p0=tProvider%20%3C-%20t%20%3C-%20%24http%20%3C-%20%24compile
Нет другого сообщения, кроме этого. Это происходит при первой загрузке страницы.
Я'м управлением ASP.NET MVC5, угловой 1.2RC3, и толкает в Azure через Git.
Погугли еще'т ничего интересного.
Какие-либо предложения?
Редактировать:
Я'м с помощью TypeScript и определения зависимостей с `$вложил в нее переменных, например:
export class DashboardCtrl {
public static $inject = [
'$scope',
'$location',
'dashboardStorage'
];
constructor(
private $scope: IDashboardScope,
private $location: ng.ILocationService,
private storage: IDashboardStorage) {
}
}
Я считаю, что должна (или должен) сделать вокруг локальной переменной переименовании проблемы, которые возникают при минификации и которые могут вызвать эту ошибку.
Что сказал, это явно как-то связано с процессом минификации, а когда я BundleTable.EnableOptimizations = правда` на моем компьютере dev, я могу воспроизвести его.
Если следовать вашей ссылке, он говорит вам, что в результате ошибки от $форсунки не в состоянии решить свои зависимости. Это распространенная проблема, с углового, когда JavaScript-код получает сжатый/uglified/все, что вы'повторно делать это для производства.
Проблема, когда у вас, например, контроллер;
angular.module("MyApp").controller("MyCtrl", function($scope, $q) {
// your code
})
В минификации изменения $охват
и $Q
, то в случайных переменных, которые не'т сказать, что угловые впрыснуть. Решение это объявить зависимостей такой:
angular.module("MyApp")
.controller("MyCtrl", ["$scope", "$q", function($scope, $q) {
// your code
}])
Это должно исправить вашу проблему.
Просто чтобы повторить, все, что я'вэ сказал это по ссылке сообщение об ошибке, предоставляет вам.
Столкнулся с такой же проблемой сама, но мои определения контроллера выглядел немного иначе, чем выше. Для контроллеров определить так:
function MyController($scope, $http) {
// ...
}
Просто добавьте строку, после заявление с указанием, какие объекты вводить, когда контроллер инициализируется:
function MyController($scope, $http) {
// ...
}
MyController.$inject = ['$scope', '$http'];
Это делает его минификации-безопасный.
Эта проблема возникает, когда контроллер или директивы не указаны в массиве зависимостей и функций. Например
angular.module("appName").directive('directiveName', function () {
return {
restrict: 'AE',
templateUrl: 'calender.html',
controller: function ($scope) {
$scope.selectThisOption = function () {
// some code
};
}
};
});
Когда уменьшенная на '$объем' передать функции регулятора заменяется одной переменной буквенное имя . Это будет оказывать угловые невежественный зависимости . Чтобы избежать этого передать имя зависимостей наряду с функции как массив.
angular.module("appName").directive('directiveName', function () {
return {
restrict: 'AE',
templateUrl: 'calender.html'
controller: ['$scope', function ($scope) {
$scope.selectThisOption = function () {
// some code
};
}]
};
});
Если у вас есть разделенные файлы для угловой приложения\ресурсов, директивы и другие вещи, то вы можете просто отключить минимизация ваших угловой набор приложений, как это (использование нового пакета() вместо ScriptBundle() в связке файл конфигурации):
bundles.Add(
new Bundle("~/bundles/angular/SomeBundleName").Include(
"~/Content/js/angular/Pages/Web/MainPage/angularApi.js",
"~/Content/js/angular/Pages/Web/MainPage/angularApp.js",
"~/Content/js/angular/Pages/Web/MainPage/angularCtrl.js"));
И угловые приложение появится в пачке без изменений.
Добавить $протоколу HTTP, $объем услуг в функцию контроллера, иногда, если им не хватает этих ошибок.
Если у вас есть разделенные файлы для угловой приложения\ресурсов, директивы и другие вещи, то вы можете просто отключить минимизация ваших угловой набор приложений, как это (использование нового пакета() вместо ScriptBundle() в связке файл конфигурации):
У меня была такая же проблема, но вопрос был в другом, я пытался создать службу и передать $объем ему в качестве параметра. Что'ы и другой способ получить эту ошибку в документации, что ссылка говорит:
пытаясь придать объекту объем в все, что's не контроллер или директива, например, услугу, и бросит неизвестный поставщик: scopeProvider $<- $объема ошибки. Это может произойти, если один ошибочно регистрирует контроллер в качестве сервиса, напр.:
angular.module('myModule', [])
.service('MyController', ['$scope', function($scope) {
// This controller throws an unknown provider error because
// a scope object cannot be injected into a service.
}]);