我对角度非常新,所以试着把问题描述为尽可能的清晰。 我想制作和单页应用程序,提供有关人与人之间交易的一些信息。 AS后端即时通讯使用MySQL数据库+ nodejs作为支持服务器,角度为前端。
问题是我有一个带有ID的人员表和每个人的姓名,余额。 然后我有一个表格,我存储人们之间的所有交易(Id,Giver ID,Taker ID,Amount)。
在前端,当我获得有关交易的信息时,我获得了给予者和接受者的IDS,但我想用来自人员表/对象的相应名称替换它们。
我显然不知道如何管理这个。我想到了循环事务对象并用名称替换数组中的每个ID。 shuffle
交易对象:
[Object]0: id: 1 giver_id: 1 taker_id: 5 amount: 50
人物对象:
[Object]0: balance:"-50" id:1 name:"Edgars"[Object]1: balance:"0" id:2 name:"Jānis"
所以我想用名字Edgars替换giver_id 1,因为作为给予者ID的FK会使人员ID成为问题。
我不想要一个清晰的衣服,但至少要想深入了解。
答案 0 :(得分:2)
我的建议是处理服务器端两个表之间的连接。
UI将进行一次webservice调用以获取事务。响应应该是一个事务数组,每个事务对象应该具有提供者和接受者的名称。
您需要SQL查询才能加入这两个表。简单的连接SQL看起来像这样。
select t.id as TRANS_ID, gp.name as GIVER, tp.name as TAKER, t.amount
from transaction t
join person gp on t.giver_id = gp.id
join person tp on t.taker_id = tp.id;
对UI的JSON响应如下所示:
[
{
"trans_id": 1,
"giver_name": "James",
"taker_name": "Michael",
"amount": 50
},
{
"trans_id": 2,
"giver_name": "Jim",
"taker_name": "Mike",
"amount": 100
}
]
这样,您的所有逻辑都将位于服务器端,而您的UI只需显示数据。
答案 1 :(得分:1)
您可以从两个列表中映射新列表:
var newList = transactionsList.map(function(t) {
var giver,taker;
giver = personList.find(function(p) {
return p.id == t.giver_id;
});
taker = personList.find(function(p) {
return p.id == t.taker_id;
});
if(giver && taker) {
t.giver_name = giver.name;
t.taker_name = taker.name;
return t;
}
else {
return undefined;
}
});
或者如果你只需要在一个对象上:
function transformTransaction(t) {
var giver,taker;
var newTransaction = angular.copy(t);
giver = personList.find(function(p) {
return p.id == t.giver_id;
});
taker = personList.find(function(p) {
return p.id == t.taker_id;
});
if( giver && taker ) {
newTransaction.giver_name = giver.name;
newTransaction.taker_name = taker.name;
return newTransaction;
}
else {
return undefined;
}
}