angularjs封装$http为factory的方法

 更新时间:2017年05月18日 17:21:47   作者:qingqingdezou_lei  
本篇文章主要介绍了angularjs封装$http为factory的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

angularjs有本身封装的ajax服务$http,因为用惯了jQuery的ajax,所以,自己封装了一下angularjs的$http,代码如下

app.factory('dataFactory', function ($http, $q){ 
  var factory = {}; 
  factory.getlist = function(endpoint, method, headers, params) { 
    var defer = $q.defer(); 
    if (method == 'GET') { 
      $http({ 
        url: endpoint, 
        method: "GET", 
        headers: headers, 
        params: params, 
      }).success(function (data) { 
        defer.resolve(data); 
      }). 
      error(function (data, status, headers, config) { 
        // defer.resolve(data); 
        defer.reject(data); 
      }); 
    } else { 
      $http({ 
        url: endpoint, 
        method: method, 
        headers: headers, 
        data: params, 
      }).success(function (data) { 
        defer.resolve(data); 
      }). 
      error(function (data, status, headers, config) { 
        // defer.resolve(data); 
        defer.reject(data); 
      }); 
    } 
    return defer.promise; 
    }; 
    return factory; 
}); 

在controller中引入dataFactory和$http即可使用更方便的调用ajax,一般情况下headers为

headers = {'Content-Type': 'application/json'};

params为一个json字符串

然后调用

dataFactory.getlist("/api/checkDuplicate", 'GET', headers, params).then(function(data) { 
//success函数 
},function(data){ 
//error函数 
}) 

但是其中又一次在项目中,后台框架使用的是Struts框架,在一个Python中使用的很好的dataFactory,在这里的后台取不到数,最后发现是应为header设置不对,而且params的格式也不正确,可以把header修改为

 headers = {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'};

上面dataFactory中else添加转换params代码:

var param = function(obj) { 
        var query = '', name, value, fullSubName, subName, subValue, innerObj, i; 
 
        for(name in obj) { 
         value = obj[name]; 
 
         if(value instanceof Array) { 
          for(i=0; i<value.length; ++i) { 
           subValue = value[i]; 
           fullSubName = name + '[' + i + ']'; 
           innerObj = {}; 
           innerObj[fullSubName] = subValue; 
           query += param(innerObj) + '&'; 
          } 
         } 
         else if(value instanceof Object) { 
          for(subName in value) { 
           subValue = value[subName]; 
           fullSubName = name + '[' + subName + ']'; 
           innerObj = {}; 
           innerObj[fullSubName] = subValue; 
           query += param(innerObj) + '&'; 
          } 
         } 
         else if(value !== undefined && value !== null) 
          query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&'; 
        } 
        return query.length ? query.substr(0, query.length - 1) : query; 
        }; 
      $http({ 
        url: endpoint, 
        method: method, 
        headers: headers, 
        data: param(params), 
      }).success(function (data) { 
        defer.resolve(data); 
      }). 
      error(function (data, status, headers, config) { 
        // defer.resolve(data); 
        defer.reject(data); 
      }); 

只是个人觉得这个方式比较方便,记录下来,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • angular异步验证防抖踩坑实录

    angular异步验证防抖踩坑实录

    这篇文章主要给大家介绍了关于angular异步验证防抖踩坑的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用angular具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • 浅谈angular.js中实现双向绑定的方法$watch $digest $apply

    浅谈angular.js中实现双向绑定的方法$watch $digest $apply

    Angular用户都想知道数据绑定是怎么实现的。你可能会看到各种各样的词汇:$watch,$apply,$digest它们是如何工作的呢?这里我想回答这些问题,其实它们在官方的文档里都已经回答了,但是我还是想把它们结合在一起来讲
    2015-10-10
  • 详解基于Bootstrap+angular的一个豆瓣电影app

    详解基于Bootstrap+angular的一个豆瓣电影app

    本篇文章主要介绍了基于Bootstrap+angular的一个豆瓣电影app ,非常具有实用价值,需要的朋友可以参考下
    2017-06-06
  • AngularJs每天学习之总体介绍

    AngularJs每天学习之总体介绍

    这篇文章主要为大家详细介绍了Angularjs总体介绍及数据绑定部分内容,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 解决angular双向绑定无效果,ng-model不能正常显示的问题

    解决angular双向绑定无效果,ng-model不能正常显示的问题

    今天小编就为大家分享一篇解决angular双向绑定无效果,ng-model不能正常显示的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 利用Angularjs实现幻灯片效果

    利用Angularjs实现幻灯片效果

    AngularJS是Google开发的纯客户端JavaScript技术的WEB框架,用于扩展、增强HTML功能,它专为构建强大的WEB应用而设计。下面这篇文章我们来分享如何利用Angularjs实现幻灯片效果。
    2016-09-09
  • BootStrap+Angularjs+NgDialog实现模式对话框

    BootStrap+Angularjs+NgDialog实现模式对话框

    在完成一个后台管理系统时,需要用表格显示注册用户的信息。但是用户地址太长了,不好显示。所以想做一个模式对话框,点击详细地址按钮时,弹出对话框,显示地址。下面小编给大家分享下实现方法,一起看下吧
    2016-08-08
  • Angular.js中window.onload(),$(document).ready()的写法浅析

    Angular.js中window.onload(),$(document).ready()的写法浅析

    这篇文章主要介绍了Angular.js中window.onload(),$(document).ready()的写法浅析,需要的朋友可以参考下
    2017-09-09
  • 浅谈Angular HttpClient简单入门

    浅谈Angular HttpClient简单入门

    本篇文章主要介绍了浅谈Angular HttpClient 简单入门,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • AngularJS开发教程之控制器之间的通信方法分析

    AngularJS开发教程之控制器之间的通信方法分析

    这篇文章主要介绍了AngularJS开发教程之控制器之间的通信方法,结合实例形式较为详细的分析了AngularJS控制器之间通信的三种常用方式及相关使用技巧,需要的朋友可以参考下
    2016-12-12

最新评论