我收集了以下格式的数据:
[{
xRatio: 0.2,
yRatio: 0.1,
value: 15
}, {
xRatio: 0.6,
yRatio: -0.3,
value: 8
}]
我想在ng-repeat
中显示这些数据。但在我显示这些数据之前,我必须以
[{
x: 120,
y: 110,
value: 15
}, {
x: 160,
y: 70,
value: 8
}]
为了做到这一点,我在ng-repeat
中使用了一个函数,但是这个转换函数每次调用都会返回一个新的集合,因此模型永远不会稳定,角度抛出infinite loop exception
并放弃。
html代码是,
<div ng-repeat="result in results">
<div>
<heat-map data="convertResult(result)"></heat-map>
</div>
</div>
热图指令会插入并显示数据。
我的问题是:如何处理这种情况,而不会使用生成的值混淆我的初始集合?
因此结果集合的单个元素没有改变我想到了转换器函数上的one-time-binding
,但这不起作用。
我还希望能够从已转换的集合以及原始集合中删除项目。
答案 0 :(得分:2)
使用::
中的ng-repeat
运算符来阻止重新评估表达式:
<div ng-repeat = "item in ::convert(items)" >
否则,您可以在将数据提供给ng-repeat
之前手动转换数据:
JS
$scope.cleanData = convert( $scope.ratioData );
HTML
<div ng-repeat = "item in cleanData" >
或者在需要时进行转换。在指令热图中,使用符号data
将&
定义为表达式绑定,并在指令控制器中使用
scope.data()
答案 1 :(得分:0)
您可以在ng-repeat
中使用转换后的数据版本吗?
像这样(在您的控制器中):
var convertedData = data.map(function datum) {
return convert(datum);
});
function convert(datum) {
// ... your conversion logic here ...
}
然后在convertedData
中使用ng-repeat
?