gpt4 book ai didi

AngularJS:每次启动ajax调用时都需要触发事件

转载 作者:行者123 更新时间:2023-12-02 21:54:39 24 4
gpt4 key购买 nike

每次启动 ajax 调用时,我都会尝试在 $rootScope 上触发一个事件。

var App = angular.module('MyApp');

App.config(function ($httpProvider) {
//add a transformRequest to preprocess request
$httpProvider.defaults.transformRequest.push(function () {
//resolving $rootScope manually since it's not possible to resolve instances in config blocks
var $rootScope = angular.injector(['ng']).get('$rootScope');
$rootScope.$broadcast('httpCallStarted');

var $log = angular.injector(['ng']).get('$log');
$log.log('httpCallStarted');
});
});

事件“httpCallStarted”没有被触发。我怀疑在配置 block 中使用 $rootScope 或任何其他实例服务是不正确的。如果是这样,如何在每次 http 调用开始时获取事件,而不必每次调用时都传递配置对象?

提前致谢

最佳答案

您始终可以将 $http 包装在服务中。由于服务仅设置一次,因此您可以让服务工厂为您设置事件。老实说,这对我来说有点hackish,但这是一个很好的解决方法,因为 Angular 还没有一个全局的方法来做到这一点,除非在 1.0.3 中添加了一些我不知道的东西。

Here's a plunker of it working

这是代码:

app.factory('httpPreConfig', ['$http', '$rootScope', function($http, $rootScope) {
$http.defaults.transformRequest.push(function (data) {
$rootScope.$broadcast('httpCallStarted');
return data;
});
$http.defaults.transformResponse.push(function(data){
$rootScope.$broadcast('httpCallStopped');
return data;
})
return $http;
}]);

app.controller('MainCtrl', function($scope, httpPreConfig) {
$scope.status = [];

$scope.$on('httpCallStarted', function(e) {
$scope.status.push('started');
});
$scope.$on('httpCallStopped', function(e) {
$scope.status.push('stopped');
});

$scope.sendGet = function (){
httpPreConfig.get('test.json');
};
});

关于AngularJS:每次启动ajax调用时都需要触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13746052/

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