我已经和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>
最后 - 我希望实现的目标:
标题:某些标题
{{subject.state}} / {{subject.state_id}}是许多相关的值..我正在尝试将结果与“unique_id”相关联。
现在正在发生的有趣事情是ab_activities.json文件中有一个值被多次显示,因为deffered.resolve();在ee_activities.json值上设置,并且该值具有“多对一”值。
我在想我可以使用“forEach()”函数然后以某种方式传递我想要关联的值,然后使用下划线的._where()函数来获取相关值?只是还不确定,希望有人会有一些Angular代码的亮点可以帮助: - )
答案 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页面更新小提琴