在指令中使用Angular过滤器作为函数
Using a Angular filter as a function inside a directive
我有一个函数(shortenNum
),它通过在数字的末尾添加"K"或"M"并去掉零来"缩短"数字。我决定把它变成一个过滤器,因为我使用的是Angular。
过滤器/函数必须在指令内部应用,而不是标记。我在指令中注入了过滤器本身,但是当我尝试使用它时,函数本身抛出了错误:
错误:[$injector:unpr]未知提供商:shortenNumProvider <- shortenNum <- d3PieDirectivehttp://errors.angularjs.org/1.2.10/$喷射器/unpr ? p0 = shortenNumProvider % 20% 3 c - 3 c % 20 shortennum % 20% % 20 d3piedirective…
指令:
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;
});
First:这就是过滤器应该如何使用吗?
第二:如果是,我的语法/概念错误是什么?
我已经发布了两种使用过滤器的方法:
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);
})
}
}
})
相关文章:
- 通过过滤器函数划分数组
- JavaScript's数组过滤器函数在没有分配函数的情况下使用-这里发生了什么
- 过滤器函数的 JavaScript 函数参数
- 创建一个 JavaScript 递归过滤器函数
- 从过滤器传递值作为角度中 js 函数的参数
- 如果可能的话,我需要帮助了解这个jQuery过滤器函数是如何工作的,逐行工作
- 使用 JS 寻找我的过滤器函数的较短版本
- 函数式 Javascript 算法不从过滤器返回预期结果
- 使用 reduce 在 Javascript 中构建过滤器函数
- 需要帮助在 JavaScript 中编写自定义过滤器函数
- 链+过滤器+返回值不是函数
- Javascript过滤器函数:我如何使这个过滤器出绿色水果
- AngularJS:自定义过滤器函数不触发
- 在angular中使用HTTP请求的过滤器函数
- 数组中.在服务器端Javascript中的过滤器函数
- AngularJS自定义过滤器,对过滤器函数进行无限循环
- 在Typescript中传递一个表达式作为过滤器函数的参数
- 如何传递一个额外的参数给jQuery过滤器函数
- Ramda.js通过对象值创建一个过滤器函数
- JQuery grep (. .)VS原生JavaScript过滤器(..)函数性能