Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在AngularJS中基于id数组返回值_Javascript_Angularjs_Firebase - Fatal编程技术网

Javascript 如何在AngularJS中基于id数组返回值

Javascript 如何在AngularJS中基于id数组返回值,javascript,angularjs,firebase,Javascript,Angularjs,Firebase,这个问题真的很难复制,因为它看起来几乎是随机的,但这里有一个基本的例子,说明我在尝试做什么,我认为我没有用AngularJS的最佳方式来做,这就是我遇到问题的原因 index.html app.js 正如您所看到的,我试图输出的数据不是一个简单的变量,而是一个需要在真实环境中动态计算的变量—JSON数据是从Firebase后端提取的 console.debug记录每个职业的正确人数,但是当我硬刷新页面时,有时会显示正确的人数,有时是0 很难找到问题的根源,因为当它显示为0和函数的返回值时,它似乎

这个问题真的很难复制,因为它看起来几乎是随机的,但这里有一个基本的例子,说明我在尝试做什么,我认为我没有用AngularJS的最佳方式来做,这就是我遇到问题的原因

index.html

app.js

正如您所看到的,我试图输出的数据不是一个简单的变量,而是一个需要在真实环境中动态计算的变量—JSON数据是从Firebase后端提取的

console.debug记录每个职业的正确人数,但是当我硬刷新页面时,有时会显示正确的人数,有时是0

很难找到问题的根源,因为当它显示为0和函数的返回值时,它似乎是随机的

在AngularJS中有没有更好的方法?我对Angular真的是个新手&可能用错误的方式来处理这个问题


我觉得这与作用域/DOM在启动函数之前没有完全更新有关。

如果使用标准Firebase JS API加载数据,当同步完成时,应该使用$scope。$apply;告诉您的应用程序视图数据已更改

如果使用AngularFireAPI,则不需要它


我创建了一个可工作的Plunker,您只需将peopleUrl变量设置为firebase的URL。

您可以添加一个延迟来查看它是否工作吗?Javascript的setTimeout。正在异步加载数据。因此,当console.debug语句执行时,它可能在那里,但也可能仍在从Firebase服务器传输。请参阅此链接以了解如何正确执行此操作的示例:@FrankvanPuffelen这看起来像我需要的,但是文档很混乱,我不确定如何传入参数,或者在创建工厂后如何使用参数。我们无法提供帮助,因为文档很混乱。很抱歉但你可以提出具体的技术问题,我们可以提供帮助。此外,您的示例没有演示Firebase代码,尽管这显然是问题集的主要组成部分。看见
<!doctype html>
<html ng-app="test">
<head>
<meta charset="utf-8">
<title>Testing</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular-route.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular-animate.js"></script>
<script src="app.js"></script>

</head>

<body ng-controller="main">

    <pre>numPeopleInProfession('Graphics') {{numPeopleInProfession('Graphics') | json}}</pre>
    <pre>numPeopleInProfession('Psychology') {{numPeopleInProfession('Psychology') | json}}</pre>

</body>
</html>
var app = angular.module('test', []);

app.controller('main', function($scope){

    $scope.people = [
        {
            'name':'Jordan',
            'profession':'Graphics'
        },
        {
            'name':'Amber',
            'profession': 'Psychology'
        },
        {
            'name':'Megan',
            'profession': 'Graphics'
        }
    ]

    $scope.numPeopleInProfession = function(profession) {
        var numPeople = 0;
        for(var i=0; i<$scope.people.length; i++) {
            if($scope.people[i].profession == profession) {
                numPeople+=1;
            }
        }
        console.debug(numPeople);
        return numPeople;
    };

});