Как я должен аннотировать контроллер для работы при минимизации, когда его зависимости представляют собой смесь объектов, предоставляемых Angular и методом разрешения?

Итак, у меня есть следующий угловой вид:

<div ng-controller="myController">
    {{helloWorld}}
    <br /><br />
    <button type='button' ng-click='showModal();'>Click me</button>
</div>

И следующий JS-код:

var testApp = angular.module('testApp', ['ui.bootstrap']);

var myController = function($scope, $modal){
    $scope.helloWorld = 'Hello World';

    $scope.showModal = function(){
        var modalInstance = $modal.open({
            template: '{{something}} <br/> <button type="button" ng-click="updateSomething()">Click me now</button>',
            controller: modalController,
            resolve: {
                helloWorld: function () {
                    return $scope.helloWorld;
            },
        }
    });
    }   

}

myController.$inject = ['$scope', '$modal'];
testApp.controller('myController', myController);

var modalController = function($scope, $modalInstance, helloWorld){

    $scope.something = 'Yada yada yada';

    $scope.updateSomething = function () {
        $scope.something = helloWorld;
    };
}

JSFiddle находится здесь.

Когда все объединено и минимизировано, myController отлично работает, потому что я создал аннотацию, сообщающую testApp о myController, и назвал testApp< Метод контроллера /strong>.

Однако я застрял на modalController, как правильно подключить его к контейнеру DI Angular?

Я знаю, что у него есть свойство $inject. Я попытался создать аннотацию для modalController так же, как я сделал для myController, а затем поместил helloWorld в этот массив, как показано в этой обновленной скрипте, но я получаю сообщение об ошибке "Неизвестный поставщик".

Итак, мой вопрос: когда некоторые из зависимостей контроллеров предоставляются angular, а другие - через метод разрешения, как вы сообщаете контейнеру DI Angular обо всех из них, чтобы все работало должным образом при минимизации?

Спасибо


person JMK    schedule 15.05.2014    source источник


Ответы (1)


Проблема здесь:

modalController.$inject.push($scope.helloWorld);

Это добавляет значение helloWorld к зависимостям, но вам нужен сам helloWorld. Поэтому удалите эту строку, просто добавьте helloWorld к другим зависимостям:

modalController.$inject = ['$scope','$modalInstance', 'helloWorld'];
person a better oliver    schedule 15.05.2014