我有一个函数(shortenNum
)通过在其末尾添加“K”或“M”并剥离零来“缩短”数字。我决定把它变成一个过滤器,因为我在Angular上。
过滤器/函数必须在指令内部应用,而不是标记。我在指令中注入了过滤器本身,但是当我尝试使用它时,函数本身就抛出了错误:
错误:[$ injector:unpr]未知提供者:shortenNumProvider< - shortenNum< - d3PieDirective http://errors.angularjs.org/1.2.10/ $注射器/ unpr?P0 = shortenNumProvider%20%3 C-%20shortenNum%20%3 C-%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;
});
首先:这是否应该使用过滤器?
第二:如果是这样,我的语法/概念错误是什么?
答案 0 :(得分:0)
我已经发布了两种方法,你可以在这个小提琴中使用你的过滤器:
http://jsfiddle.net/9Ymvt/1844/
在指令或服务中使用过滤器是完全可以接受的,但是您需要将过滤器注入到指令中。您可以注入$filter
,但本着只需要您需要的精神,可能更好地注入单个过滤器,如下所示:
angular.module('components', [])
.directive('controllerFilter', function (shortNumFilter) {
return {
restrict: 'E',
scope:{
num:'@'
},
template: '<span>controllerFilter: {{ filteredNum }}</span>',
controller: function ($scope, $element, $attrs) {
$scope.$watch('num', function(newVal, oldVal) {
$scope.filteredNum = shortNumFilter(newVal);
})
}
}
})