从module.config中调用stateProvider的resolve中的Service函数。

我想把一个模态转化为一个页面。模态数据是用一个叫做 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 函数,之前是在resolution中调用的,在旧的代码中可以看到,但我不知道在新的代码版本中到底该怎么做。我想在配置文件中做。


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',
            })
    }]);

但我收到了一个未定义函数的错误,用上述方法。有没有一种方法可以在config的resolution中访问服务函数及其属性?或者有其他更好的方法吗?

解决方案:

我不知道你是如何得到 specialEntity 在你 resolve目前,你可以这样调用服务方法。

你的服务:

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

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

和配置。

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

某个笨蛋


附带说一下,我想把一个模态转化为一个页面。

我想把一个模态转化为一个页面。

值得使用 组成部分 所以你可以在控制器或模态中调用该组件。

本文来自投稿,不代表实战宝典立场,如若转载,请注明出处:https://www.shizhanbaodian.com/11354.html

(0)
上一篇 6天前
下一篇 6天前

相关推荐

发表评论

登录后才能评论