当前位置: 首页 > 面试题库 >

AngularJS中的TypeScript拦截器

施昊然
2023-03-14
问题内容

我在使用TypeScript在AngularJS中设置请求拦截器时遇到问题

以下代码段有效,但无效版本已注释掉。无论我在构造函数中注入什么,局部变量在request方法中都是未定义的。

module Services
{
    export class AuthInterceptor
    {
        public static Factory(TokenService: Services.ITokenService)
        {
            return new AuthInterceptor(TokenService);
        }

        constructor(private TokenService: Services.ITokenService)
        {
            this.request = (config: ng.IRequestConfig) =>
            {
                config.headers = config.headers || {};
                if(this.TokenService.IsAuthorised())
                    config.headers.Authorization = 'Bearer ' + this.TokenService.Token;
                return config;
            };
        }

        public request: (config: ng.IRequestConfig)=>ng.IRequestConfig;

/* THIS IS NOT WORKING

        public request(config)
        {
                    // this.TokenService is undefined here as well as $window or $q which I tried to inject
            config.headers = config.headers || {};
            if(this.TokenService.Token != "")
                config.headers.Authorization = 'Bearer ' + this.TokenService.Token;
            return config;
        }
*/

    }
}

angular.module("Services")
    .config(($httpProvider: ng.IHttpProvider)=>
    {
        $httpProvider.interceptors.push(Services.AuthInterceptor.Factory);
    });

问题答案:

是因为错误this。解:

    public request = (config) =>
    {
                // this.TokenService is undefined here as well as $window or $q which I tried to inject
        config.headers = config.headers || {};
        if(this.TokenService.Token != "")
            config.headers.Authorization = 'Bearer ' + this.TokenService.Token;
        return config;
    }


 类似资料:
  • 本文向大家介绍详解AngularJS中的http拦截,包括了详解AngularJS中的http拦截的使用技巧和注意事项,需要的朋友参考一下 http拦截,即$http服务允许我们与服务端交互,有时候我们希望在发出请求之前以及收到响应之后做些事情。 $httpProvider包含了一个interceptors的数组。 我们这样创建一个interceptor。 接着注册interceptor.  以下

  • 问题内容: 是否可以为ng-click编写拦截器?我有一个按钮或链接,导致后端对象的删除。我想通过将属性添加到按钮/链接来创建一个确认对话框(模式)。例如: AngularJS有可能吗?有没有更好的方法可以解决此问题? 编辑 deleteIt方法驻留在不同的控制器中。 谢谢 问题答案: 我在下面放了一个示例指令: http://plnkr.co/edit/GJwK7ldGa9LY90bMuOfl?

  • 本文向大家介绍AngularJS中的拦截器实例详解,包括了AngularJS中的拦截器实例详解的使用技巧和注意事项,需要的朋友参考一下 AngularJS中的拦截器实例详解 异步操作 有时候需要在拦截器中做一些异步操作。幸运的是, AngularJS 允许我们返回一个 promise 延后处理。它将会在请求拦截器中延迟发送请求或者在响应拦截器中推迟响应。 下面是项目中用到的代码。 感谢阅读,希望能

  • 问题内容: 我对角度(和编程)不熟悉,这是一个看似简单的问题,但我无法弄清楚。 一些教程建议使用操纵http请求和响应。 我想知道更多关于拦截的事情,所以我看的正式文件,但我找不到,只有一个方法(useApplyAsync([值]);)与拦截任何东西,在一个属性(默认)(文档)。 我从其他教程中知道拦截器是常规服务工厂,并且知道如何使用它,但是我的问题是:由于语法是,所以我希望在中找到一个名为“

  • 问题内容: 我知道如何拦截所有请求,但是我只想拦截来自我资源的请求。 有谁知道如何做到这一点? 问题答案: 如果只想拦截来自特定资源的请求,则可以使用可选的action 属性。Angular的文档请参见此处(用法>操作) 的JavaScript Plunker:http ://plnkr.co/edit/xjJH1rdJyB6vvpDACJOT?p=preview

  • 问题内容: 我目前在一个有角度的应用程序中工作,我想为我的应用程序中的所有http请求编写一个拦截器,这反过来会调用一个服务,以了解单点登录会话是否仍处于活动状态,如果未处于活动状态,我应该转到我的单点登录,然后根据用户请求加载下一页或结果。我不确定如何在AngularJS中编写拦截器,也不确定将页面重定向到“单一登录”时如何保存用户请求。 我当前正在使用angularjs 1.0.2,我看到在1