是否可以使用依赖注入来引用过滤器内的控制器?我尝试了以下方法:
app.filter('myFilter', function(MyCtrl) {...})
app.controller('MyCtrl', function(...) {})
但是我收到一条错误,指出无法找到MyCtrl依赖。
答案 0 :(得分:0)
实际上就是这样:
只需将$filter
注入您的控制器
.controller('myController', function($scope, $filter) {...});
然后,您想要使用该过滤器并不重要,只需使用它:
$filter('filterName');
如果要将参数传递给该过滤器,请使用单独的括号:
.controller('myController', function($scope, $filter) {
$filter('filterName')(argument1,argument2);
});
答案 1 :(得分:0)
如果您尝试访问过滤器中的某种状态信息,则应考虑将该功能移至服务中,然后从过滤器和控制器访问该服务。
我无法想出在过滤器中实例化控制器的原因,所以如果你给出了一些关于你试图解决的问题的更多背景知识,我们可以为你提供更多关于如何最好的定制信息。实施它。
在任何情况下,here's a Plunk显示过滤器和控制器共享一些数据:
app.controller('MainCtrl', function($scope, MyService) {
$scope.text = "ABCDEFG";
$scope.data = 2;
$scope.$watch('data', function() {
MyService.setData($scope.data);
})
});
app.service('MyService', function() {
service = {}; // the service object we'll return
var dataValue = 'data';
service.setData = function(data) {
dataValue = data;
}
service.getData = function() {
return dataValue;
}
return service;
});
app.filter('truncate', function(MyService) {
return function(input) {
return input.substring(0, MyService.getData());
};
});
如果您查看了插件,请注意您必须更新文本以使过滤器重新运行,并显示更新的字符数。