Код контроллера Angular mdDialog дает сбой при минимизации

Я успешно добавил пользовательский шаблон mdDialog для запроса имени и логического (из флажка) диалогового окна, которое появляется при щелчке элемента.

Однако, несмотря на то, что он отлично работает в разработке, он терпит неудачу в производстве, поскольку процесс сборки минимизирует код js. Я нашел много примеров в SO по этой проблеме, но ни один из них не указывает, как что-то исправить в моем случае, в большинстве случаев это решение или что-то, что легко понять. Мой код:

function DialogController ( $scope, $mdDialog, gsheet, name ) {
  $scope.name = name;
  $scope.gsheet = gsheet;

  $scope.cancel = function () {
    $mdDialog.cancel ();
  };

  $scope.create = function ( name, gsheet ) {
    $mdDialog.hide ( { 'name': name, 'createSheet': gsheet ? gsheet : false } );
  };
}

function openNewDataSourceDialog ( ev ) {
  if ( !$rootScope.driveAuth ) {
    $rootScope.$emit ( 'requestMoreAuth' );
  }
  else {

    var confirm = $mdDialog.prompt ( {
      templateUrl: "app/main/data-sources/data-sources-dialog.tmpl.html",
      parent: angular.element ( document.body ),
      clickOutsideToClose: true,
      targetEvent: ev,
      controller: DialogController,
      fullscreen: false,
      scope: $scope,
      preserveScope: true,
      locals: {
        name: "",
        gsheet: true
      }
    } );

    $mdDialog.show ( confirm ).then ( function ( result ) {
      //create something...
    }, function () {
      //dont create anything...
    } );
  }
};

Любые идеи о том, что здесь нарушает минификацию? Спасибо!


person geodeath    schedule 17.08.2017    source источник


Ответы (1)


В основном это происходит, когда вы минимизируете также $mdDialog имя. Добавьте для него внедрение зависимостей.

В твоем случае:

      var confirm = $mdDialog.prompt ( {
      templateUrl: "app/main/data-sources/data-sources-dialog.tmpl.html",
      parent: angular.element ( document.body ),
      clickOutsideToClose: true,
      targetEvent: ev,
      controller: ['$scope', '$mdDialog', 'gsheet', 'name', 
           function ($scope, $mdDialog, gsheet, name) { /* ... */}],
      fullscreen: false,
      scope: $scope,
      preserveScope: true,
      locals: {
        name: "",
        gsheet: true
      }
    } );

Or:

//...
controller: ['$scope', '$mdDialog', 'gsheet', 'name', DialogController],
//...
person Maxim Shoustin    schedule 17.08.2017
comment
Спасибо, попробую. Спасибо и за правки, все понятно. :) - person geodeath; 17.08.2017
comment
@geodeath У меня была такая же проблема до 2 лет :) - person Maxim Shoustin; 17.08.2017
comment
Отредактировал создание контроллера с помощью вашего редактирования, и это работает, но вместо этого было бы неплохо сделать это в атрибуте. Сохраняет код чище, я думаю. :) Благодарность! - person geodeath; 17.08.2017