如何在过滤器中获取 AngularJS 控制器
How to get an AngularJS controller in a filter
是否可以使用依赖注入来引用过滤器内部的控制器?我尝试了以下方法:
app.filter('myFilter', function(MyCtrl) {...})
app.controller('MyCtrl', function(...) {})
但是我得到一个错误,找不到 MyCtrl 依赖项。
其实是这样的:
只需将 $filter
注入您的控制器
.controller('myController', function($scope, $filter) {...});
然后你想在哪里使用那个过滤器并不重要,就像这样使用它:
$filter('filterName');
如果您想将参数传递给该过滤器,请使用单独的括号:
.controller('myController', function($scope, $filter) {
$filter('filterName')(argument1,argument2);
});
如果您正在尝试访问过滤器中的某种状态信息,您应该考虑将该功能移动到服务中,然后从过滤器和控制器访问该服务。
我想不出要在过滤器内实例化控制器的理由,所以也许如果您提供更多关于您试图解决的问题的背景信息,我们可以为您提供更多定制信息最好实施它。
无论如何,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());
};
});
如果您检查了 plunk,请注意您必须更新文本以使过滤器重新运行显示更新的字符数。
是否可以使用依赖注入来引用过滤器内部的控制器?我尝试了以下方法:
app.filter('myFilter', function(MyCtrl) {...})
app.controller('MyCtrl', function(...) {})
但是我得到一个错误,找不到 MyCtrl 依赖项。
其实是这样的:
只需将 $filter
注入您的控制器
.controller('myController', function($scope, $filter) {...});
然后你想在哪里使用那个过滤器并不重要,就像这样使用它:
$filter('filterName');
如果您想将参数传递给该过滤器,请使用单独的括号:
.controller('myController', function($scope, $filter) {
$filter('filterName')(argument1,argument2);
});
如果您正在尝试访问过滤器中的某种状态信息,您应该考虑将该功能移动到服务中,然后从过滤器和控制器访问该服务。
我想不出要在过滤器内实例化控制器的理由,所以也许如果您提供更多关于您试图解决的问题的背景信息,我们可以为您提供更多定制信息最好实施它。
无论如何,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());
};
});
如果您检查了 plunk,请注意您必须更新文本以使过滤器重新运行显示更新的字符数。