繁体   English   中英

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

[英]How to return values based on an id array in AngularJS

这个问题真的很难复制,因为它看起来几乎是随机的,但这是我要尝试做的一个基本示例,我认为我没有在AngularJS中做到最好,这就是我遇到问题的原因。

index.html

<!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>

app.js

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;
    };

});

如您所见,我要输出的数据不是一个简单的变量,而是一个需要动态计算的变量(在实际环境中,JSON数据是从Firebase后端提取的)。

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

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

在AngularJS中有更好的方法吗? 我真的是Angular的新手,可能会以错误的方式来处理这个问题。

我觉得这与范围/ DOM在触发功能之前未完全更新有关。

如果您使用标准的Firebase JS API加载数据,则在同步完成后,应使用$scope.$apply(); 告诉您的应用,视图数据已更改。

如果您使用AngularFire API,则不需要它。

我在这里创建了一个工作的Plunker,您只需要使用firebase的URL设置peopleUrl var。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM