$ stateParams params没有到达$ http配置对象

时间:2017-05-26 14:39:15

标签: angularjs angular-ui-router

我在Angular的配置步骤中有下一个功能:

  function blockUIConfig(blockUIConfig) {
      blockUIConfig.requestFilter = function(config) {
          if ("undefined" !== typeof config.data && config.data.commActionId === CMC_ACTION_IDENTIFIER.CMC_ACTION_MONITORING) {
              return false;
          }
          return true;
      };
  }

上一个函数的config对象对应于常规$ http配置对象:https://docs.angularjs.org/api/ng/service/$http#usage

当我进行常规$ http调用时,一切都按预期工作,我可以获得我想要的参数数据:

$http({
    url: "/pump/35801/35803", 
    method: "GET",
    params: {param1: '111'}
});

我可以在param1地图中正确看到config.params值:

enter image description here

现在我在ui-router中尝试相同的操作,但我无法让它工作。

我有下一个ui-router状态:

{
state: 'pump-edit',
config: {
    url: '/pump/{equipmentId}/{pumpId}',
    params: {
        param1: null
    }
  }
}

我像这样调用GET调用:

$state.go('pump-edit', {pumpId: vm.pump.id, equipmentId: vm.pump.equipmentId, param1: '111'}, {notify: false});

但在这种情况下config.params不存在:

enter image description here

如果我通过控制器中的$ stateParams阅读equipmentIdpumpIdparam1,我可以毫无问题地看到它们:

enter image description here

所以我的问题是:如何通过ui-router将参数传递给$ http config对象?

谢谢。

1 个答案:

答案 0 :(得分:0)

正如提到的@JB Nizet,$ stateParams与$ http无关。

解决方案是在我的状态配置中添加一个参数(hideBlockUI),如下所示:

state: 'pump-edit',
        config: {
            resolve: {
               initialData: ['$stateParams', 'PumpEditService', function($stateParams, PumpEditService) {
                   return PumpEditService.getPumpData($stateParams.pumpId, $stateParams.hideBlockUI);
                }]
            },
            url: '/pump/{equipmentId}/{pumpId}',
            params: {
                hideBlockUI: null
            },
            templateUrl: 'app/pump/edit/pump.edit.html',
            controller: 'PumpEditController',
            controllerAs: 'vmPumpEdit',
            title: 'pump.edit.tab.title',
            ncyBreadcrumb: {
              label: '{{bcPumpName}}',
              parent: 'pumps({equipmentId: bcEquipmentId})'
            }
          }

然后在调用状态时设置该参数:

$state.go('pump-edit', {pumpId: pump.id, equipmentId: $stateParams.equipmentId, hideBlockUI: true});

现在我调用$ http调用并设置该参数:

  function getPumpData(pumpId, hideBlockUI) {
      return $http.get(BASE_URL + '/rest/pump/edit/' + pumpId, {params: {hideBlockUI: hideBlockUI}})
        .then(
                function(response) {
                    return response;
                }
        );
  }

最后我可以在配置函数中获取该参数:

function blockUIConfig(CMC_ACTION_IDENTIFIER, blockUIConfig) {
      blockUIConfig.delay = 250;
      blockUIConfig.message = 'block.ui.default.message';
      blockUIConfig.templateUrl = 'templates/blockui-template.html';
      blockUIConfig.requestFilter = function(config) {

          console.log(config.params.hideBlockUI);
          return true;
      };

非常感谢!