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

AngularJS从服务加载数据

师成弘
2023-03-14
问题内容

我在将服务中的数据填充到视图中时遇到问题。我有这样定义的服务

app.factory('nukeService', function($rootScope, $http) {
    var nukeService = {};

    nukeService.nuke = {};

    //Gets the list of nuclear weapons
    nukeService.getNukes = function() {
        $http.get('nukes/nukes.json')
            .success(function(data) {
                nukeService.nukes = data;
            });

        return nukeService.nukes;
    };

    return nukeService;
});

和我的控制器

function NavigationCtrl($scope, $http, nukeService){



    /*$http.get('nukes/nukes.json').success(function(data) {
        $scope.nukes = data;
    });*/

    $scope.nukes = nukeService.getNukes();

}

如果我从控制器使用$
http.get,数据将很好地填充,但是,如果我尝试从服务中调用数据,那么我什么也不会得到。我知道查询是异步的,但是我很难理解一旦返回数据就如何填充$
scope变量。我可以使用$
rootscope广播事件并在控制器中侦听它,但这似乎并不是完成此事件的正确方法。对于如何正确执行此操作的任何建议,我将不胜感激。


问题答案:

我认为这应该可以解决您的问题

app.factory('nukeService', function($rootScope, $http) {
    var nukeService = {};

    nukeService.data = {};

    //Gets the list of nuclear weapons
    nukeService.getNukes = function() {
        $http.get('nukes/nukes.json')
            .success(function(data) {
                nukeService.data.nukes = data;
            });

        return nukeService.data;
    };

    return nukeService;
});

function NavigationCtrl($scope, $http, nukeService){

    $scope.data = nukeService.getNukes();

    //then refer to nukes list as `data.nukes`

}

这是对象引用的问题。

调用时,您nukeService.getNukes()获得对一个对象的引用,a然后您的变量$scope.nukes引用该内存位置。

在设置了远程服务器之后,nukeService.nukes = data;您不需要更改对象,a而是nukeService.nukes从引用对象更改a为对象b。但是您$scope.nukes不知道这种重新分配,它仍然指向对象a

在这种情况下,我的解决方案是传递a具有属性的对象,data然后仅更改数据属性,而不是更改对a



 类似资料:
  • 我试图从一个服务加载一些数据,该服务在控制台中测试时工作,它正确地显示了所需的数组,但当从我的组件调用服务的相同方法时(我需要呈现数据),它只显示[object]。。。。在控制台中,组件本身上没有任何内容。 仅供参考:正在使用的提供商(/api/departement)正常工作,因为数据可以显示在控制台中(来自服务本身的数据)。 这是我的代码: Department.ts: Departement

  • 问题内容: 我在Angular中有一个服务,该服务使用我的API来获取用户信息并将其提供给控制器。设置如下: 在我的控制器中,我将其包含为: 这不会返回任何数据,而如果我将相同的服务功能放在控制器本身中,它将返回正确的值。我在这里想念什么?以前从未在Angular中使用过DI / Services,因此在某个地方可能是一个简单的错误。 我需要确保该服务在控制器加载 之前 返回数据。如何做到这一点

  • 现在,我们正试图根据业务规则的需要集成。我们希望将所有规则存储在数据库中,这些规则将在JBPM服务器启动时(或Java VM启动时)加载。因此,规则将被加载到工作内存中,并可在需要时在JBPM流程中使用。 这里有2个问题:- 1)如何完成这一工作(从数据库加载规则,并在JBPM服务器加载时将它们放入JBPM和Drools的工作内存中)? 其思想是,一旦加载了规则,就可以根据需要访问进程中的任何地方

  • 我正在使用ipython笔记本电脑,通过连接到一个服务器,我不知道如何通过编程将东西(例如数据帧、.csv文件等)下载到本地计算机。因为我不能像C://user/。。。它会下载到他们的机器上而不是我的

  • 我正在尝试建立 PHP 连接,但不断收到此错误。我希望有人能帮忙。 我的代码给出了以下错误: 我的代码是: 而 busca.php 的文件是: