gpt4 book ai didi

angularjs - 是否可以使用拦截器向Angular $ http请求添加GET/POST参数

转载 作者:行者123 更新时间:2023-12-04 00:53:55 24 4
gpt4 key购买 nike

假设我需要在用户提出的每个请求中都包含一个GroupId参数,但是我不想修改每个服务调用以包括该参数。是否可以将GroupId自动附加到所有请求,无论是POST还是GET查询字符串?

我一直在研究拦截器request函数,但不知道如何进行更改

** 编辑 **

下面的当前工作示例是Morgan Delaney和haimlit的建议的组合(无论如何,我认为这是一个组合)。基本思想是,如果请求是POST,则修改config.data。对于GET,修改params。到目前为止似乎工作正常。

尚不清楚提供程序系统如何在Angular中工作,因此我不确定在这里修改data.params属性是否完全合适。

.config(['$httpProvider', function ($httpProvider) {
$httpProvider.interceptors.push(['$rootScope', '$q', 'httpBuffer', function ($rootScope, $q, httpBuffer) {
return {

request: function (config) {

if (config.data === undefined) {
//Do nothing if data is not originally supplied from the calling method
}
else {
config.data.GroupId = 7;
}

if (config.method === 'GET') {
if (config.params === undefined) {
config.params = {};
}
config.params.GroupId = 7;
console.log(config.params);
}

return config;
}
};
} ]);
} ]);

最佳答案

如果您的示例可行,那就太好了。但是它似乎缺乏语义恕我直言。

在我的评论中,我提到了创建服务,但是我已经使用工厂设置了一个示例Plunker。

Plunker

相关代码:

angular.module( 'myApp', [] )
.factory('myHttp', ['$http', function($http)
{
return function(method, url, args)
{
// This is where the magic happens: the default config
var data = angular.extend({
GroupId: 7
}, args );

// Return the $http promise as normal, as if we had just
// called get or post
return $http[ method ]( url, data );
};
}])
.controller( 'myCtrl', function( $scope, $http, myHttp )
{
// We'll loop through config when we hear back from $http
$scope.config = {};

// Just for highlighting
$scope.approved_keys = [ 'GroupId', 'newkey' ];

// Call our custom factory
myHttp( 'get', 'index.html', { newkey: 'arg' }).then(function( json )
{
$scope.config = json.config;
});
});

关于angularjs - 是否可以使用拦截器向Angular $ http请求添加GET/POST参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24414154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com