Вызов функции сервиса в разрешении stateProvider из module.config - PullRequest
1 голос
/ 29 апреля 2020

Я хочу превратить модал в страницу. Модальные данные заполнены функцией под названием fillProperties. Вот старый сервис с модальным режимом:

// BEFORE
angular.module('mda')
  .service('visualizationModalService', ['$rootScope', 'nsjRouting', 'moment', 'toaster', '$uibModal', '$q', '$injector', '$filter',
    function ($rootScope, nsjRouting, moment, toaster, $uibModal, $q, $injector, $filter) {

      var fillProperties = function (specialEntity, scope) {
        // important stuff
      }

      var selfService = {
        open: function (solicitation, scope) {
          return $uibModal.open({
            template: require('html-loader!./visualization.modal.html'),
            controller: ['entity', '$uibModalInstance', '$injector', 'toaster', '$scope', '$rootScope', function (entity, $uibModalInstance, $injector, toaster, $scope, $rootScope) {
              // LOTS OF CODE
            }],
            controllerAs: "$ctrl",
            resolve: {
              entity: function () {
                entity = angular.copy(solicitation);
                return fillProperties(entity, scope); // important function call!
              }
            }
          });
        }
      };

      return selfService;
    }]);

Вы можете видеть, что есть вызов функции fillProperties в разрешении.

Я заменил вышеупомянутый сервис и контроллер в более отдельным способом:

// AFTER
angular.module('mda')
  .service('visualizationService', ['$rootScope', 'nsjRouting', 'moment', 'toaster', '$uibModal', '$q', '$injector', '$filter',
    function ($rootScope, nsjRouting, moment, toaster, $uibModal, $q, $injector, $filter) {

      var fillProperties = function (specialEntity, $scope) {
        // important stuff
      }

    }])

angular.module('mda')
  .controller('visualizationFormShowController', [
    '$scope', '$stateParams', '$state', 'entity', 'toaster', '$injector', 'visualizationService', function (
      $scope, $stateParams, $state, entityService, entity, toaster, $injector, visualizationService) {
      // LOTS OF CODE 
    }]);

Проблема в том, что мне нужно выполнить эту функцию fillProperties, которая ранее вызывалась в разрешении, как вы можете видеть в старом коде, но я не знаю как именно это сделать в новой версии кода. Я пытаюсь сделать это в файле конфигурации:


angular.module('mda')
    .config(['$stateProvider', 'nsjRoutingProvider', function ($stateProvider, nsjRoutingProvider) {

        $stateProvider
            .state('meurh_solicitacoes_show', {
                url: "/visualizations?/:visualization/",
                resolve: {
                    entity: function () {
                        entity = angular.copy(solicitation);
                        return fillProperties(entity, scope);
                    }
                },
                template: require('html-loader!./show.html'),
                controller: 'visualizationFormShowController',
                controllerAs: 'vslztns_frm_shw_cntrllr',
            })
    }]);

, но я получаю сообщение об ошибке неопределенной функции с вышеуказанным подходом. Есть ли способ получить доступ к сервисной функции и ее свойствам в разрешении конфига? Или есть другие подходы лучше?

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Я не уверен, как вы получаете specialEntity в вашем resolve, поэтому вы можете вызвать метод обслуживания следующим образом:

Ваш сервис:

app.service('visualizationModalService', ['$rootScope', function () {
      var self = this;

      self.fillProperties = function (entity) {
       alert("fillProperties is called with data = " + entity);
      }
 }]);

и config :

 resolve: {
      entity: function (visualizationModalService) {              
          return visualizationModalService.fillProperties("someData");
      }
  },

Какой-то плункер


Примечание:

Я хочу преобразовать модал на страницу.

Стоит использовать компонент , чтобы вы могли вызвать компонент в контроллере или модальном

1 голос
/ 29 апреля 2020

Есть ли способ доступа к сервисной функции и ее свойствам в разрешении конфигурации?

Сервисы могут быть введены в функции разрешения аналогичным образом они вводятся в контроллеры:

app.config(['$stateProvider', 'nsjRoutingProvider', function ($stateProvider, nsjRoutingProvider) {
    $stateProvider
    .state('meurh_solicitacoes_show', {
        url: "/visualizations?/:visualization/",
        resolve: {
            entity: ['visualizationService', function (visualizationService) {

                //Use the service here

                return promiseOrValue;
            }]
        },
        template: require('html-loader!./show.html'),
        controller: 'visualizationFormShowController',
        controllerAs: 'vslztns_frm_shw_cntrllr',
    })
}]);

Имейте в виду, что $scope не может быть введен в функции разрешения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...