У меня была функция (shortenNum
), которая «сокращает» число, добавляя к нему «K» или «M» и удаляя нули. Я решил превратить его в фильтр, потому что я использую Angular.
Фильтр / функция должны применяться внутри директивы, а не в разметке. Я ввел сам фильтр внутри директивы, но сама функция, когда я пытаюсь ее использовать, выдает ошибку:
Ошибка: [$ injector: unpr] Неизвестный провайдер: shortNumProvider ‹- shortNum‹ - d3PieDirective http://errors.angularjs.org/1.2.10/ $ injector / unpr? p0 = shortNumProvider% 20% 3C-% 20shortenNum% 20% 3C-% 20d3PieDirective ...
Директива:
myApp.directive('d3Pie', [
'$window',
'd3Service',
'shortenNum',
function($window, d3Service, shortenNum) {
return {
...
// eventually call
return shortenNum(d.data.count);
Фильтр:
// Rewrites a given number in a shorthand form
myApp.filter('shortenNum', function(num) {
if(num > 99999) { return (num/1000000).toFixed(1) + 'M'; }
if(num > 999) { return (num/1000).toFixed(1) + 'K'; }
return num;
});
Во-первых. Это вообще то, как следует использовать фильтры?
Во-вторых: Если да, то в чем моя синтаксическая / концептуальная ошибка?
$filter
, введенный в директиву? - person sir_thursday   schedule 07.07.2014filter()
объявление - вот о чем я говорил - person charlietfl   schedule 07.07.2014$filter
в вашу директивуd3Pie
, а затем вы можете вызвать свойshortenNum
фильтр в форме:$filter('shortenNum')(array, expression, comparator)
. - person miqh   schedule 07.07.2014filter()
действительно должен возвращать функцию. См. Пример фильтра в обучающей документации здесь docs.angularjs.org/tutorial/step_09 - person charlietfl   schedule 07.07.2014