假设我有两个json对象,一个是用户,另一个是帐户,例如:
users = [
{id: 1, account_id: 1},
{id: 2, account_id: 2},
{id: 3, account_id: 1}
]
accounts = [
{id: 1, name: "administrator"},
{id: 2, name: "moderator"}
]
所以我必须遍历所有用户数组,并为每个用户获取帐户信息。哪个是管理这些关系以便在标记中访问它们的最佳方法?我找到了以下解决方案:
方法1:只重复一个元素,这样就可以过滤元素并使其在标记的那一部分可用
<div ng-repeat="user in users">
<div ng-repeat="account in getAccountFromId(user.account_id)">
<!-- now account is available in all this scope to access user.account.name -->
</div>
</div>
方法2:更改从后端返回信息的方式,使每个用户的json返回每个json返回的帐户信息。但这将在每个json对象中重复大量信息。这也意味着由于角度的原因而改变了后端。
<div ng-repeat="user in users">
<!-- with this approach I can access here user.account.name -->
</div>
有人能告诉我这些方法是否正确?有没有更好的方法来管理角度中的对象关系?
非常感谢。
答案 0 :(得分:3)
如果您真的不喜欢改变来自服务器的数据形状的想法,另一种选择是将用户映射到javascript中的帐户。
app.controller("MyController", function($scope) {
// Pretend that 'users' and 'accounts' here came from an xhr request
var users = [
{id: 1, account_id: 1},
{id: 2, account_id: 2},
{id: 3, account_id: 1}
]
var accounts = [
{id: 1, name: "administrator"},
{id: 2, name: "moderator"}
]
// Map accounts to users
for(var i=0; i<users.length; i++) {
for(var j=0; j<accounts.length; j++) {
if (accounts[j].id === users[i].account_id) {
users[i].account = accounts[j];
}
}
}
});
答案 1 :(得分:0)
我遇到了同样的问题,并认为进行数据映射不是前端工作 因此,而不是像account_id那样返回:
users = [
{id: 1, account_id: 1},
{id: 2, account_id: 2},
{id: 3, account_id: 1}
]
我使用&#34; account_name&#34;扩展了模型。 (或者对我来说等同于什么)
因此建议的输出
users = [
{id: 1, account_id: 1, account_name: "administrator"},
{id: 2, account_id: 2, account_name: "moderator"},
{id: 3, account_id: 1, account_name: "administrator"}
]
这有点多余,但在UI中让您的生活更轻松,并且在服务器上的成本也不高。