на "непойманные ошибка: [$инжектор:неустойчивых]" с углового после развертывания

У меня довольно простой угловой приложение, которое работает просто отлично на моем компьютере 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
}])

Это должно исправить вашу проблему.

Просто чтобы повторить, все, что я'вэ сказал это по ссылке сообщение об ошибке, предоставляет вам.

Комментарии (11)

Столкнулся с такой же проблемой сама, но мои определения контроллера выглядел немного иначе, чем выше. Для контроллеров определить так:

function MyController($scope, $http) {
    // ...
}

Просто добавьте строку, после заявление с указанием, какие объекты вводить, когда контроллер инициализируется:

function MyController($scope, $http) {
    // ...
}
MyController.$inject = ['$scope', '$http'];

Это делает его минификации-безопасный.

Комментарии (0)

Эта проблема возникает, когда контроллер или директивы не указаны в массиве зависимостей и функций. Например

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
            };
        }]
    };
});
Комментарии (0)

Если у вас есть разделенные файлы для угловой приложения\ресурсов, директивы и другие вещи, то вы можете просто отключить минимизация ваших угловой набор приложений, как это (использование нового пакета() вместо 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"));

И угловые приложение появится в пачке без изменений.

Комментарии (3)

Добавить $протоколу HTTP, $объем услуг в функцию контроллера, иногда, если им не хватает этих ошибок.

Комментарии (0)

Если у вас есть разделенные файлы для угловой приложения\ресурсов, директивы и другие вещи, то вы можете просто отключить минимизация ваших угловой набор приложений, как это (использование нового пакета() вместо ScriptBundle() в связке файл конфигурации):

Комментарии (0)

У меня была такая же проблема, но вопрос был в другом, я пытался создать службу и передать $объем ему в качестве параметра. Что'ы и другой способ получить эту ошибку в документации, что ссылка говорит:

пытаясь придать объекту объем в все, что'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.
}]);
Комментарии (0)