13
app.controller('myController', ['$scope', '$http', '$filter', function($scope, $http, $filter) {

以上是我尝试使用的代码示例,$http.get也在$filter我的controller.

唯一的问题是当我这样使用它时,控制台日志会抛出一个错误,上面写着$filter is not a function.

app.controller('myController', ['$scope', '$http', '$filter', function($scope, $filter, $http) {

当我交换它们时,它会引发一个错误$http is undefined

4

3 回答 3

25

当您使用

app.controller('myController', ['$scope', '$http', '$filter', function($scope, $filter, $http) {

变量$filter实际上是 的实例$http,并且$http是 的实例$filterfunction(...)实际上,在params中写什么并不重要。

这里重要的是您使用的注射剂的顺序,例如

app.controller('myController', ['$scope', '$http', '$filter', function(a, b, c) {

将映射到实例:

  • 一个 -> 范围
  • b -> $http
  • c -> $过滤器

从角度文档:

由于 Angular 从控制器构造函数的参数名称中推断出控制器的依赖关系,如果你要缩小 PhoneListCtrl 控制器的 JavaScript 代码,它的所有函数参数也会被缩小,并且依赖注入器将无法识别正确服务。

因此,通过对您的控制器使用数组表示法,您可以确保代码在代码被缩小后仍然可以工作。

于 2014-06-18T11:56:26.650 回答
2

在 http 和 angular 版本之后添加过滤器也可以保护您将如何使用过滤器。

     plateFormController.$inject = ['$scope', '$http',
    '$filter','$timeout', '$q', '$mdSidenav', '$log'];



function plateFormController($scope, $http,$filter, $timeout, $q) {
          jsonByName=$filter('filter')($scope.json, { name: 'a' });
        }
于 2017-01-31T10:22:40.077 回答
0

在我的情况下,通过确保预期的列表对象不为空,预期的数据列表对象为空。我能够避免这个错误。

于 2017-11-28T12:29:03.847 回答