AngularJS - How to deflate and encode/decode to ba

2019-08-05 02:13发布

可以说我有几个$资源和一些$ HTTP在我的角度应用:

myApp.factory('Note', function($resource) {

  return $resource('http://', {id: '@id'}, 
    { 'index': { method: 'GET', isArray: true },
      'update': { method: 'PUT'},
    });
  });

与控制器

myApp.controller('NotesController',function NotesController($scope, Note, AuthenticationService) {

$scope.notes = Note.index({}, function(data){
    console.log('success, got data: ', data);
    $scope.response = "yoy!"
  }, function(err){
    console.log('error, got data: ', err);
    $scope.response = "yay!"
  }); 
});

有的要求由$ HTTP一样,直接由认证

var request = $http.post('http://', {email: email, password: password});

在哪里和如何我可以告诉角放气和编码/解码JSONs为Base64实际提出要求/响应收到过吗?

我quess我将包裹的放气和编码/解码外部库进厂。 然后,这家工厂将被注入somehere? 像$ httpBackend?

Answer 1:

你应该看看的请求/响应变压器 $http服务: http://docs.angularjs.org/api/ng.$http

请求/响应变压器是简单地可内容之前被调用的功能被发送/递回给调用者。 您可以指定全球范围的转变功能(对所有请求/响应),以及每个请求的基础:

以局部覆盖这些变换,指定变换函数作为transformRequest和/或配置对象的transformResponse属性。 要全局覆盖默认的转换,覆盖的$ httpProvider的$ httpProvider.defaults.transformRequest和$ httpProvider.defaults.transformResponse性能。

要定义全局请求/响应变压器一个会写沿着这些线路(它更像是伪代码,不会在所有的浏览器,看到下面的Base64笔记)的代码:

angular.module('sample', [], function($httpProvider) {

    $httpProvider.defaults.transformRequest = function(data, headersGetter) {
        return btoa(JSON.stringify(data));
    };

    $httpProvider.defaults.transformResponse = function(data, headersGetter) {
        return JSON.parse(atob(data));
    };

})

当然,你的转换代码可能会更复杂,更取决于请求/响应头,但总的想法是在这里。 与代码的jsfiddle(检查控制台看到的请求得到转化,就需要使用Mozilla或WebKit浏览器): http://jsfiddle.net/Ydt5j/

对于实际的转换从/为Base64检查这样的问题: 你怎么可以编码在JavaScript字符串为Base64?



Answer 2:

angular.module('services.base64',[]);
angular.module('services.base64').provider('base64', function () {

  this.encode = function(str) {
    return base64_encode(str);
  }

  this.decode = function(str) {
    return base64_decode(str);
  }

  this.$get = function() {
    return {};
  }

});

var myApp = angular.module('myApp',['services.base64'])

myApp.config(['base64Provider', function (base64Provider) {
    $httpProvider.defaults.transformRequest = function(request){return base64Provider.encode(request)};

    $httpProvider.defaults.transformResponse = function(response){return base64Provider.decode(response)};
}]);


Answer 3:

这是我在过滤器怎么办。 item.htmlBody包含HTML标记base64编码文本

// in template
<div ng-bind-html="item.htmlBody | decodeBase64">{{item.htmlBody}}</div>

//inside controller.js

.filter('decodeBase64', function(){
   return function(text){
   return atob(text);
   }
})

嗯,我知道这并不确切地回答这个问题,但有一些小的调整,你可以得到你想要的东西(靶向未来的人同样的问题)



文章来源: AngularJS - How to deflate and encode/decode to base64 all jsons request?