web-dev-qa-db-fra.com

$ filter n'est pas une fonction AngularJS

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

Ce qui précède est un exemple de code dans lequel j'essaie d'utiliser $http.get ainsi que $filter dans ma controller.

Le seul problème est que lorsque je l'utilise comme cela, le journal de la console génère une erreur indiquant $filter is not a function

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

Lorsque je les échange, cela génère une erreur qui $http is undefined

12
ngplayground

Quand vous utilisez

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

la variable $filter est en fait une instance de $http et $http est une instance de $filter. En réalité, peu importe ce qui est écrit dans les paramètres function(...).

Ce qui est important ici, c'est l'ordre des injectables que vous utilisez, par exemple 

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

mappera aux instances:

  • a -> portée
  • b -> $ http
  • filtre c -> $

De docs angulaires:

Puisque Angular déduit les dépendances du contrôleur à partir des noms des arguments de la fonction constructeur du contrôleur, si vous réduisez le code JavaScript du contrôleur PhoneListCtrl, tous ses arguments de fonction le seront également, ainsi ne serait pas en mesure d'identifier les services correctement.

Donc, en utilisant la notation de tableau pour votre contrôleur, vous vous assurez que le code fonctionnera une fois le code minifié.

24
domakas

add filter après http et la version angulaire défendent également la manière dont vous allez utiliser le filtre. 

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



function plateFormController($scope, $http,$filter, $timeout, $q) {
          jsonByName=$filter('filter')($scope.json, { name: 'a' });
        }
1
Gajender Singh

Dans mon cas, l'objet de liste de données attendu est null, en vérifiant que l'objet de liste attendu n'est pas null. Je suis capable d'éviter cette erreur. 

0
Ravi