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

(AngularJS)如何$ http.get数据并将其存储在服务中

柯天宇
2023-03-14
问题内容

如您所见,我在AngularJS,JS和Web开发中都是新手=)对此感到非常抱歉,但我尝试这样做。

我尝试使用AngularJS控制器构建大型的Web表单(大约200个不同的字段)。我需要从控制器访问根数据源。AngularJS团队要求不要只为存储数据而提供服务,而是要为加载和保存数据(从服务器上的.json文件开始)提供服务。

服务:

AppName.factory('MasterData', ['$rootScope', '$http', '$q', '$log', 
    function($rootScope, $http, $q, $log) {

    var responseData;
    $http.get('/getdata.php').then(function (response) {
        responseData = response.data;
        console.log(response.data);
    });

    return responseData;

}]);

控制器:

AppName.controller('justController', ['$scope', 'MasterData', '$log',
    function ($scope, MasterData, $log) {
        $scope.data = MasterData.justControllerSectionData;
        console.log(MasterData);
    }
]);

控制器返回未定义。但是来自服务的console.log返回该对象。我觉得这个问题太容易了,但是我找不到解决方法的方法:(同样,我也无法使用.getData()之类的功能从控制器到服务,因为每次加载任何控制器时,它都会从服务器询问数据。我在AngularJS应用程序中使用12-14个控制器(完整的Web表格按部分划分)中的路由,我认为从后端一次获取数据是很好的。

PS:我认为promise存在问题,但是当我尝试使用这样的代码时:

var defer = $q.defer();
$http.get('/getdata.php').success(function(data){
    defer.resolve(data);
});
return defer;

我有解决的对象,拒绝等等。真的不明白我该怎么办:(

帮我获取控制器中的数据:)


问题答案:

您的代码不起作用,因为您success()在服务中提供的回调被异步调用;服务返回后,即:

顺序是这样的:

  1. function在MasterData运行。该$http.get请求被启动并附加了promise回调。responseData在此回调中被引用(又称“关闭”)。
  2. 该功能从服务返回到控制器。responseData尚未设置,不会阻止父范围函数返回。
  3. $http.get成功并responseData在服务中设置,但是控制器无法访问。

如果success()您不清楚嵌套函数的作用域,则建议阅读有关JavaScript中闭包的信息(一般来说,甚至更好)

您可以通过以下服务实现您的目标:

function($q, $http, /* ... */) {    
    return {
        getData: function() {
            var defer = $q.defer();
            $http.get('/getdata.php', { cache: 'true'})
            .then(function(response) {
                defer.resolve(response);
            });

            return defer.promise;
    };
}

$http服务将愉快地缓存您的响应数据,因此您不必这样做。请注意,您需要从defer红色对象中检索promise 才能完成此工作。

控制器是这样的:

/* omitted */ function($scope, YourService) {
    YourService.getData().then(function(response) {
        $scope.data = response.data;
    });
}

由于成功折旧了,因此我将成功修改为那时。



 类似资料:
  • 问题内容: 目前,我正在使用一项服务来执行操作,即从服务器检索数据,然后将数据存储在服务器本身上。 取而代之的是,我想将数据放入本地存储中,而不是将其存储在服务器上。我该怎么做呢? 问题答案: 这是我存储和检索到本地存储的代码的一部分。我使用广播事件来保存和恢复模型中的值。

  • 问题内容: 我已经搜索了很长一段时间,但对于如何实际保存其数字却一无所获。它们是字符数组吗?还有吗 以及如何将数据转换为? 从我发现的结果来看,我假设所有任意精度类(例如和)都将数据保存为字符数组。这实际上是这样吗?还是只是人们的猜测? 我之所以问是因为我一直在自己完成类似的实现,但是我不知道如何保存大于(不记得实际的数字)的数字。 提前致谢。 问题答案: 带着 从来源:

  • 我在我的android应用程序中使用了reverfit2和Rxjava2作为网络库,NodeJS和MongoDB作为后端服务,我想从服务器获取数据,并将数据存储在房间数据库中,以便如果用户再次打开应用程序,它将从房间获取数据,而不是从服务器获取数据,直到服务器上添加了一些新的数据。 我想达到的目标: 1)从服务器获取数据后,存储在房间数据库中。 2)显示房间数据库中数据,直到服务器上更新了一些新数

  • 问题内容: 我有一个执行http POST请求的函数。代码在下面指定。这很好。 我为http GET提供了另一个功能,我想将数据发送到该请求。但是我没有那个选择。 的语法是 获取(URL,配置) 问题答案: HTTP GET请求不能包含要发布到服务器的数据。但是,您可以将查询字符串添加到请求中。 angular.http为此提供了一个选项。 请参阅:http : //docs.angularjs.

  • 问题内容: 我需要从XML文件中获取数据并将其存储到MySQL数据库中。我正在考虑使用SAX解析器来解析数据,但是我不确定如何将数据有效地存储到数据库中,我正在考虑使用JDBC和Hibernate等少数技术,但是我想问一问有效的处理方式它? 注意:此处的编程语言是Java。 问题答案: 您可以使用Castor witch是一个开放源数据绑定框架,用于将数据从XML移动到Java编程语言对象以及从J

  • 问题内容: 我需要将两个对象注入。其中一个是的实例,我得到这样的信息: 那么如何在我的services.yml中声明呢?这是服务: 问题答案: 我找到了此链接,这对我有用: