使用Angularjs将许多数组值组合到相关的数组值

时间:2014-07-23 17:59:45

标签: angularjs

我已经和Angularjs合作了几个星期了,我开始喜欢它了,但我还有最后一个要解决的问题,这让我有所帮助......

基本上我有两个带有相关值的json文件。这意味着每个json文件中都有一个公共密钥,我想用它来做SQL中的各种连接。这是一对多的关系。所以一个值与多个值有关。我很接近,但我似乎无法弄清楚如何说“对于这个数组值,从这个其他文件中获取所有这些相关值然后将它们显示为一个结果”。

我还包括了Underscorejs并将其注入我的控制器中作为解决此问题的可能方法..

我还不熟悉,但到目前为止这是我的代码:

ab_activities.json的内容(带有“many”的文件):

[
  {
    "unique_id":"001",
    "state":"NY",
    "state_id":"1.S2.3a"
  },
  {
    "unique_id":"001",
    "state":"NY",
    "state_id":"1.S3.2d"
  },
  {
    "unique_id":"001",
    "state":"FL",
    "state_id":"SC.4.N.1.D"
  }
]

ee_activities.json文件的内容(“一个”相关值):

[
  {
    "unique_id":"001",
    "title":"Some Title",
    "url_title":"some-title"
  }
]

角度代码:

var underscore = angular.module('underscore', []);

underscore.factory('_', function() {
    return window._;
});

var abApp = angular.module('abApp', ['underscore']);

abApp.factory('abData', function($http, $q) {
    var deffered = $q.defer();
    var data = [];
    var abData = {};

    abData.async = function() {
        $http.get('/data/ab_activities.json')
            .success(function(ab) {
                data = ab;
                deffered.resolve();
            });
        $http.get('/data/ee_activities.json')
            .success(function(ee) {
                data = ee;
                //deffered.resolve();
            });
        return deffered.promise;
    };
    abData.data = function() {
        return data;
    };

    return abData;
});

abApp.controller("abEE", function(abData, $scope) {
    var abApp = this;
    abData.async().then(function(d) {
    abApp.subjects = abData.data();
    });
})

和HTML:

<div ng-controller="abEE as ee">
    <p ng-repeat="subject in ee.subjects">
    <strong><a href="/activities/{{subject.url_title}}">{{subject.title}}</a></strong>
  <ul>
    <li ng-repeat="???">{{subject.state}}, {{subject.state_id}}</li>
  </ul>
 </p>
</div>

最后 - 我希望实现的目标:

标题:某些标题

  • NY,1.S2.3a
  • NY,1.S3.2d
  • FL,SC.4.N.1.D

{{subject.state}} / {{subject.state_id}}是许多相关的值..我正在尝试将结果与“unique_id”相关联。

现在正在发生的有趣事情是ab_activities.json文件中有一个值被多次显示,因为deffered.resolve();在ee_activities.json值上设置,并且该值具有“多对一”值。

我在想我可以使用“forEach()”函数然后以某种方式传递我想要关联的值,然后使用下划线的._where()函数来获取相关值?只是还不确定,希望有人会有一些Angular代码的亮点可以帮助: - )

1 个答案:

答案 0 :(得分:0)

您通过现有代码使其变得非常复杂。它的实施非常简单。我为你提供小提琴。仔细检查一下。

这里是小提琴link

首先,在这个小提琴中我直接使用你的json对象而不需要任何服务器旅行。因此,当您修改代码时,您必须自己管理。

这将帮助你学习新东西......(非常简单)

我向您展示了根据您的要求有条件地绑定数据的动态方式。

现在,如果您有更多数据,角度将自行管理......

html页面。

<html ng-app>
    <div ng-controller="ctrl">

        <div ng-repeat="title in titles">
            <div>{{title.title}}</div>
                <div ng-repeat="state in states|filter:{unique_id:title.unique_id}">
                    <div >{{state.state}}{{state.state_id}}</div>
                </div>
        </div>
    <div>
</html>

您的控制器.js文件

function ctrl($scope) {

        $scope.states = [
  {
    "unique_id":"001",
    "state":"NY",
    "state_id":"1.S2.3a"
  },
  {
    "unique_id":"001",
    "state":"NY",
    "state_id":"1.S3.2d"
  },
  {
    "unique_id":"001",
    "state":"FL",
    "state_id":"SC.4.N.1.D"
  }
];

        $scope.titles = [
  {
    "unique_id":"001",
    "title":"Some Title",
    "url_title":"some-title"
  }
];

    }

编辑:

根据here

中现有的html页面更新小提琴