如何在过滤器中获取AngularJS控制器

时间:2015-02-06 20:30:53

标签: angularjs angularjs-directive angularjs-filter

是否可以使用依赖注入来引用过滤器内的控制器?我尝试了以下方法:

app.filter('myFilter', function(MyCtrl) {...})
app.controller('MyCtrl', function(...) {})

但是我收到一条错误,指出无法找到MyCtrl依赖。

2 个答案:

答案 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());
  };
});

如果您查看了插件,请注意您必须更新文本以使过滤器重新运行,并显示更新的字符数。