[angularjs]角的 JS 打字稿 IHttpService 注入自定义标头值

发布时间: 2017/4/23 6:41:21
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个项目,我会让成功的 Http Get 请求从打字稿(角 HTTP 服务) 代码到 Web API 控制器并在网格中显示列表。该项目使用角 JS 1.4.x 和打字稿成功。

全项目的GitHub URL并要求到服务器的打字稿代码下面。

module App {
    export class StudentListService {
        private qService: ng.IQService;
        private httpService: ng.IHttpService;

        constructor($q: ng.IQService, $http: ng.IHttpService) {
            this.qService = $q;        
            this.httpService = $http;
        }

        get(): ng.IPromise<Object[]> {
            var self = this;
            var deffered = self.qService.defer();            
            self.httpService.get('/api/values').then((result: any): void => {
                if (result.status === 200) {
                    deffered.resolve(result.data);
                } else {
                    deffered.reject(result);
                }
            }, error => {
                deffered.reject(error);
            });

            return deffered.promise;
        }
    }

    StudentListService.$inject = ['$q', '$http'];
    angular.module('app').service('StudentListService', StudentListService);
}

现在,我想要添加自定义页眉与 get 请求调用。我试过很多方面,但打字稿一直给我生成错误。任何帮助或工作大约将不胜感激。

解决方法 1:

只要您正在使用正确打字文件角你应该能够添加标题作为配置的一部分,第二个参数的类型是 ng.IRequestShortcutConfig 这是一个扩展的 IHttpProviderDefaults 具有 header 属性。

get<T>(url: string, config?: IRequestShortcutConfig): IHttpPromise<T>;

此外添加了大量简化的代码。

      export class StudentListService {

        static $inject = ['$q', '$http'];

        constructor(private qService: angular.IQService, 
                    private httpService: angular.IHttpService) { }

        get(): angular.IPromise<Object[]> {

            //Example of config structure
            var config: angular.IRequestShortcutConfig = {
                headers: {
                    "someheader":"somevalue"
                }
            }
            //add config and just return the promise directly instead of creating a deferred object. Promises are chainable
            return this.httpService.get('/api/values', config)
              .then((result: any) => result.data);

              //If you want to catch then use ".catch" instead of second argument to the "then" which is a better practice as any error that may happen inside your code in the then block will be caught as well.
        }
    }
官方微信
官方QQ群
31647020