GVKun编程网logo

在AngularJS中缓存HTTP“获取”服务响应?(angular前端缓存)

14

本文将介绍在AngularJS中缓存HTTP“获取”服务响应?的详细情况,特别是关于angular前端缓存的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一

本文将介绍在AngularJS中缓存HTTP“获取”服务响应?的详细情况,特别是关于angular前端缓存的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于$ http.post在AngularJS中不起作用、$ http在AngularJS中上传文件的进度、angularjs – Angular $httpBackend如何模拟错误响应?、angularjs – 在Angular.JS中缓存DOM的知识。

本文目录一览:

在AngularJS中缓存HTTP“获取”服务响应?(angular前端缓存)

在AngularJS中缓存HTTP“获取”服务响应?(angular前端缓存)

我希望能够创建一个自定义AngularJS服务,该服务在其数据对象为空时发出HTTP“获取”请求,并在成功时填充该数据对象。

下次调用此服务时,我想绕过再次发出HTTP请求的开销,而是返回缓存的数据对象。

这可能吗?

$ http.post在AngularJS中不起作用

$ http.post在AngularJS中不起作用

当我使用$http.get我的代码时,但是如果我使用$ http.post,则永远不会将参数获取到请求.php文件中。

这是服务功能:

    TestPanel.service('MySampleService',function ($http,$q) {
    this.getAllPosts = function () {

        var def = $q.defer();
        $http.post('/data/AJAXRequest.php','mydata=1&abcd=2').success(function (data) {
            if (data == null)
                def.reject('ERROR: DATA IS NULL');
            else if (data.HasError)
                def.reject('ERROR: ' + data.Message);
            else
                def.resolve(data);
        }).error(function () {
            def.reject('ERROR: Sorry,unable to complete your request.');
        });

        return def.promise;
    }
});

和控制器功能:

 TestController.controller('PostCtrl',['$scope','$http','MySampleService',function ($scope,$http,MySampleService) {

        function FetchPostsList() {
            MySampleService.getAllPosts().then(function (data) {
                $scope.lstPosts = data.ResponseData;
                $scope.totalRecords = data.totalRecords;
                console.info('DATA=' + $scope.lstPosts);
            },function (err) {
                console.info('err=' + err);
            });
        }

        FetchPostsList();
    }
]);

和我的AJAXRequest.php文件

<?php 
   var_dump($_POST)
?>

如果我使用 $ http.post()

输出

 array (size=0)
  empty

如果我使用 $ http.get(), 我的输出是:

array (size=2)
  'mydata' => string '1' (length=1)
  'abcd' => string '2' (length=1)

我检查了FireBug工具中的帖子,该帖子将数据发送到我的php文件中。但PHP文件没有参数。

如果我使用 $ .ajax$ .post 我的代码工作,它会给出响应。

$ http在AngularJS中上传文件的进度

$ http在AngularJS中上传文件的进度

如何从正在上传图像的AngularJS $ http POST请求中获取“进度”事件?是否可以在客户端进行此操作,还是我需要服务器在接收数据时报告进度?

答案1

小编典典

我认为$ http.post()不能用于此目的。

至于客户端,它应该与HTML5浏览器一起使用,但是您可能必须创建自己的XMLHttpRequest对象和onprogress侦听器。

angularjs – Angular $httpBackend如何模拟错误响应?

angularjs – Angular $httpBackend如何模拟错误响应?

我正在尝试测试我的程序正确处理我从http请求中获得的错误消息,但我无法弄清楚如何使用$httpBackend来模拟它.鉴于以下内容:

$httpBackend.expectGET(path).respond(400,object);

400集response.status和对象设置response.data,但是如何设置response.error?我需要测试的数据不在数据字段中.

示例API响应:

{
    status: 400,data: {},error: {}
}

解决方法

代码 …

$httpBackend.expectGET(path).respond(400,object);

说当代码向’path’端点发出请求时,用响应’object’响应400状态代码

所以,例如,假设您的单元测试在您的应用中点击此代码…

$http.GET(path).then(function(response) {
    // this code is hit with 2xx responses
    vm.fred = 'hello';
}).catch(function(errorResponse) {
    // this code is hit with any status code not starting with 2! e.g. 400
    vm.fred='Failed';
});

因此,您的代码将导致执行catch块.但是,在单元测试中,为了强制执行catch块,你需要做…

$rootScope.$digest();

这将触发then或catch块的执行(以相关者为准).

然后,您可以像往常一样在单元测试中做出预期.请注意,在您的示例中,errorResponse将是对象.

angularjs – 在Angular.JS中缓存DOM

angularjs – 在Angular.JS中缓存DOM

我正在使用路由器(正在使用内置的一个,现在使用ui-route,但是解决方案都可以)在Angular.JS中在控件/模板对之间切换。当在这些页面之间来回切换时,每次看起来很糟糕的时候,建立DOM需要一秒钟的时间。有没有任何角度保持在DOM树周围,而不是每次重新创建它。我想我只想隐藏/播放每个页面的位,而不是每次删除/重新创建它们。

欢迎任何建议!

您必须编写自己的ng-view命令来创建这样的功能。

背后的基本思路是:

在路由更改之前,不要摧毁当前视图元素和作用域,您只需将其放在一个不可见的缓存DIV中,并注销范围侦听器。给元素一个数据属性与$$ route.templateUrl能够得到它。
然后您从服务器获取下一个视图。

在路由更改之前,请检查缓存项目是否存在,并且如果在缓存区中,从缓存中获取元素,请重新注册侦听器并将当前视图放在缓存中。

棘手的部分不是让$ scopes上升。因此,您可能需要在$范围内为事件创建一个构造函数和析构函数,也可能需要$ watchers。我不确定。

但是说实话,如果你使用模板缓存并且还需要1秒钟的时间来渲染,那么你可能会有一些效率低下的watch表达式,或者是巨大的ng重复。你应该考虑一些反应。

今天关于在AngularJS中缓存HTTP“获取”服务响应?angular前端缓存的讲解已经结束,谢谢您的阅读,如果想了解更多关于$ http.post在AngularJS中不起作用、$ http在AngularJS中上传文件的进度、angularjs – Angular $httpBackend如何模拟错误响应?、angularjs – 在Angular.JS中缓存DOM的相关知识,请在本站搜索。

本文标签: