我在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
值:
现在我在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
不存在:
如果我通过控制器中的$ stateParams阅读equipmentId
,pumpId
和param1
,我可以毫无问题地看到它们:
所以我的问题是:如何通过ui-router将参数传递给$ http config对象?
谢谢。
答案 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;
};
非常感谢!