$ 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, гарантируя, что ожидаемый объект списка не равен нулю. Я могу избежать этой ошибки.