【问题标题】:Call angular request interceptor from jquery page从jQuery页面调用角度请求拦截器
【发布时间】:2017-03-31 22:17:25
【问题描述】:

我的应用程序 80% 是用 Angular 编写的,20% 是用 jquery 编写的。我已经使用 $httpprovider 在 Angular 中编写了一个请求拦截器,并且它可以与其他 Angular 页面一起正常工作。 我有三个问题:

1) 我想为我的 jquery 页面使用相同的拦截器。我怎样才能做到这一点?

2) 我希望我的拦截器在页面加载时只被调用一次。我怎样才能做到这一点?它目前被调用了 7-8 次(我猜是整个页面加载期间的 ajax 调用次数)。

3) 谁能给我输入我如何为这个拦截器和使用这个拦截器的页面编写 jasmine 规范。 提前致谢!

app.config(['$httpProvider', function ($httpProvider) {
 'use strict';
 $httpProvider.interceptors.push('myAppInterceptor');
}]);




app.factory('myAppInterceptor', ['$q','$window','$injector',function ($q,$window,$injector) {
      'use strict';
      var myAppInterceptor = {
            request: function(config) {

                console.log('myAppInterceptor is called');
                // some business logic done here...
                }
                return config;
            }
      };
      return myAppInterceptor;
}]);

【问题讨论】:

    标签: javascript jquery angularjs


    【解决方案1】:

    1) 要让 $httpProvider 拦截器拦截来自旧代码的 XHR 调用,您需要调用一个角度服务,该服务通过 $http$resource 进行 XHR 调用。

    请参阅this,了解有关从旧代码调用角度服务的信息。

    2) Angular 拦截器在每个请求上都会被调用。如果您只想在页面加载时调用它一次,则拦截器不是正确的选择。更好的选择是在服务中的页面加载时生成您想要的请求 + 逻辑,并将其作为路由器状态的 resolve 属性。

    3) 在 jasmine 中使用 $httpBackend 来模拟 $http 调用,并判断拦截器是否做了它应该做的任何事情。

    【讨论】:

    • 感谢您的回复。它有帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    相关资源
    最近更新 更多