Отформатируйте столбец сетки ui-grid в виде валюты (RC 3.0)

Параметры сетки ниже отображают данные, как ожидалось. Но если я попытаюсь отформатировать значение row.entity[col.field] в моей cellTemplate, я не получаю никаких возвращенных данных.

код:

$scope.gridOptions = {
    enableSorting: true,
    columnDefs: [
        {name: 'Award Title', field: 'projectTitle', minWidth: 100 },
        {name: 'Amount', field: 'awardAmount', cellTemplate: '<div>{{Number(row.entity[col.field]).toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,')}}
    ]
};

Приветствуется любое руководство по форматированию столбца как валюты.

Спасибо.

Ответы

Ответ 1

Вы можете использовать 'currency' cellFilter для форматирования ваших данных.

$scope.gridOptions = {
    enableSorting: true,
    columnDefs: [
        {name: 'Award Title', field: 'projectTitle', minWidth: 100 },
        {name: 'Amount', field: 'awardAmount', cellFilter: 'currency' }}
    ]
};

Ответ 2

Посмотрите на эту приятную статью: http://brianhann.com/6-ways-to-take-control-of-how-your-ui-grid-data-is-displayed/

В итоге ваши варианты:

  • Наручники
  • Фильтры ячейки
  • Шаблоны сотовых телефонов
  • Ссылки
  • Кнопки
  • Пользовательские директивы

Я сам использовал параметр Cell Filter (код переведен на ваш случай, не проверен):

$scope.gridOptions = {
   enableSorting: true,
   columnDefs: [
      {
          name: 'Award Title', 
          field: 'projectTitle', minWidth: 100
      }, {
          name: 'Amount', 
          field: 'awardAmount', 
          cellFilter: 'currencyFilter'
      }
   ] 
};

С фильтром, определенным ниже:

app.filter('currencyFilter', function () { 
    return function (value) {
        return value.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
    }
});    

Cheers, G

Ответ 3

Вы можете использовать атрибут cellFilter и фильтр по умолчанию angularJS Live Demo - http://plnkr.co/edit/NSiCrM?p=preview

$scope.colDefs = [
    { field: 'firstName', 
      displayName: 'FN' 
    },
    { field: 'amount',
      displayName: 'AMT', 
      cellFilter: 'currency'
    }
  ];

Ответ 4

Я опаздываю на вечеринку, но хочу поделиться лучшим, что сработало для меня:

JS:

myGrid.columnDefs = [{
    field: "Sale",
    cellFilter: 'number:2',
    cellClass:'currency'
}]

CSS

.currency{
    text-align:right;
}
.currency .ui-grid-cell-contents:before{
    content: '$';
    float: left;
}

Конечный результат:

Конечный столбец валюты


Детали:

Сначала я попытался использовать cellFilter:'currency', как упоминалось в предыдущем ответе, но он не учитывал различные суммы в долларах и не выравнивал значения справа:

Использовать только фильтр валют.

Итак, я добавил класс currency и right-align, который фиксировал выравнивание, но не разные долларовые суммы.

Добавлено выравнивание.

К сожалению, я не смог найти легкое решение для этого (хотя я чувствую, что там есть где-то), поэтому мне пришлось изменить cellFilter от currency до number:2 - это означает "Всегда покажите 2 десятичных знака".

Показать 2 десятичных знака

Затем мне понадобился знак доллара слева от ячейки (чтобы избежать разных сумм в долларах), для чего я добавил следующий css:

.currency .ui-grid-cell-contents:before{
    content: '$';
    float: left;
}

Который оставил меня с окончательным результатом:

Конечный столбец с выравниванием по правому краю и компенсацией для различных сумм в долларах.

Ответ 5

Хорошо возьмите ваш $из обычного выражения для стартеров. Просто положите его после тега. Выражение, кроме $part, работает. Похоже, вы просто пытаетесь вызвать функцию Javascript внутри {{}}, а не называть что-то в своем контроллере. Переместите Number(). ToFixed(). Замените на функцию в вашем контроллере и вызовите это вместо

     $scope.asCurrency = function(val) {
       return Number(...).toFixed()......
     };

Ответ 6

Попробуйте что-то вроде этого, примените собственные фильтры angular

cellTemplate: "<div>[[ row.entity[col.field]  | currency:'Q':2 ]]"