我有一张桌子,每排都有一列金钱。该金额可以是不同的货币。现在我有两种不同的货币,例如欧元和美元。
为了按金额(从低到高或反向)对该表进行排序,我应首先以美元换算金额,然后对表格进行排序。
所以,我有一个订单功能,可以很好地参考:https://docs.angularjs.org/api/ng/filter/orderBy
我创建了一个过滤器'货币'将金额从欧元转换为美元(我将其作为默认值)。货币转换器运作良好。
但是,当我点击按钮进行订购时,我会看到带有转换货币的结果,但是表格是按照第一批结果的数值排序的。
ng-click="changeCurrencyToDollars(); order('bonus_amount');"
例如,初始数据是:
并将其转换为:
为什么排序不适用于转换后的货币(过滤结果)的任何想法?
由于
控制器:
$scope.convertedCurrency = false; //initial table data with mixed currencies
$scope.changeCurrencyToDollars = function (){
$scope.convertedCurrency = $scope.convertedCurrency ? false: true;
};
$scope.order = function(predicate){
$scope.predicate = predicate;
$scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false;
$scope.operators = orderBy($scope.operators, predicate, $scope.reverse);
};
app.filter('currency', [function() {
var defaultCurrency = 'Dollars';
return function(input, currencySymbol){
var out = "";
currencySymbol = currencySymbol || defaultCurrency;
switch (currencySymbol){
case 'Dollars':
out = input;
break;
case 'EUR':
out = 1.11 * input; // convert to dollars
currencySymbol = defaultCurrency;
break;
default:
out = input;
}
return out.toFixed(0) + ' ' + currencySymbol;
}
}]);
查看: 在ng-repeat里面:
<span class="highlight-word" ng-if="!convertedCurrency">{{operators.bonus_amount}} {{operators.bonus_currency}}</span>
<span class="highlight-word" ng-if="convertedCurrency">{{operators.bonus_amount | currency: operators.bonus_currency}}</span>
答案 0 :(得分:0)
我是如何解决的:
我使用转换后的值为每个对象插入了一个新属性。这样每个对象都有一个“美元”属性。对于排序我使用了相同的$scope.order
,因为它正在工作,但具有对象的新属性。不是最好的角度解决方案,但至少“重量”在控制器中,而不在视图中。
答案 1 :(得分:0)
你没有给出你的对象,但是,让我们这样说:
$scope.operator = [{
bonus_amount:'100',
bonus_currency:'Dollars'},
{
bonus_amount:'10',
bonus_currency:'Dollars'},
{
bonus_amount:'150',
bonus_currency:'Dollars'}];
现在让我们添加货币过滤器(您可以自定义过滤器进行转换)和orderby过滤器,并显示数据: 在您的ng-repeat中添加&#39; orderBy &#39;过滤,然后,当您显示数据时,您可以添加&#39; 货币&#39;过滤器:
<li ng-repeat="operators in operator | orderBy:'+bonus_amount'">{{operators.bonus_amount | currency }}</li>
希望有所帮助,祝你好运。