$ filter не является функцией AngularJS

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

Вышеприведенный пример моего кода, где я пытаюсь использовать $http.get, а также $filter внутри my controller.

Единственная проблема заключается в том, что когда я использую его так, консольный журнал выдает сообщение об ошибке $filter is not a function.

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

Когда я меняю их вокруг, это вызывает ошибку, которая $http is undefined

Ответ 1

Когда вы используете

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

variable $filter на самом деле является экземпляром $http, а $http является экземпляром $filter. На самом деле не имеет значения, что написано в параметрах function(...).

Что важно здесь, это порядок инъекций, которые вы используете, например

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

будет отображаться в экземплярах:

  • a → scope
  • b → $http
  • c → $filter

Из angular docs:

Так как angular определяет зависимости контроллера от имен аргументов функции конструктора контроллера, если вы хотите минимизировать код JavaScript для контроллера PhoneListCtrl, все его аргументы функции также будут уменьшены, а инжектор зависимостей будет не сможет правильно идентифицировать службы.

Итак, используя нотацию массива для контроллера yout, вы убедитесь, что код будет работать после того, как код будет уменьшен.

Ответ 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' });
        }

Ответ 3

В моем случае ожидаемый объект списка данных имеет значение null, гарантируя, что ожидаемый объект списка не равен нулю. Я могу избежать этой ошибки.