我得到了以下来自 EventSource 接口的数据。我正在使用这些数据使用 Angular ng-repeat 构建一个简单的表(我已经指定了下面的表结构)。我遇到的问题是因为数据变化很快,即服务器会不断地为请求的符号发送更改,然后它会继续更新值。我想在为符号请求数据时添加一行,然后应该为新值更新同一行。这很容易并且正在工作。
但真正的挑战是(至少对我来说)当我请求另一个符号时,我希望将其添加到新的第二行,从现在开始它应该更新两行中的值。当我们请求新符号时,它会继续。使用以下数据结构是可能的,如果可以,请解释。
数据结构:
data = [
AMZN: {
name: Amazon,
symbol: AMZN,
openPrice: $100,
latestPrice: $200,
percentage: 0.1
},
FB: {
name: Facebook,
symbol: FB,
openPrice: $150,
latestPrice: $250,
percentage: 0.2
}
]
表结构:
<table>
<thead>
<tr>
<th>Session ID</th>
<th>Company Name</th>
<th>Symbol</th>
<th>Open Price</th>
<th>Latest Price</th>
<th>Percentage</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="stockVal in data">
<td>[Empty]</td>
<td>{{stockVal.companyName}}</td>
<td>{{stockVal.companySymbol}}</td>
<td>{{stockVal.openPrice}}</td>
<td>{{stockVal.latestPrice}}</td>
<td>{{stockVal.percentage}}</td>
</tr>
</tbody>
</table>
现在发生的情况是,当我请求 AMZN 时,表格会填充与亚马逊有关的值,然后如果我请求 FB,它会替换同一行中的值……即 FB 和 AMZN 都会在同一行中替换。底线是我希望将 FB 值填充到新行中。
控制器代码:
它所做的只是使用 window.EventSource 请求端点并获取数据并将其附加到范围对象。为了避免填充 n 行,每次都会刷新数据数组,例如将长度设为 0。
在下面添加控制器代码,
$scope.generateData = _generateData;
function generateData() {
endPoint = '/getData'
$scope.symbols = window.document.getElementById('symbols').value;
var eventSource = new window.EventSource(endPoint + '?&s=' + $scope.symbols);
eventSource.onmessage = function(e) {
var data = null;
try {
data = JSON.parse(e.data);
} catch (err){
}
if(data) {
$scope.$apply(function () {
$scope.companyName = data.name;
$scope.companySymbol = data.symbol;
$scope.openPrice = data.openPrice;
$scope.latestPrice = data.latestPrice;
$scope.percentage = data.percentage;
});
var specData = {
[$scope.companySymbol]: {
name: $scope.companyName,
symbol: $scope.companySymbol,
openPrice: $scope.openPrice,
latestPrice: $scope.latestPrice,
percentage: $scope.percentage
}
}
$scope.data[0] = specData[$scope.companySymbol];
}
}
};