web-dev-qa-db-ja.com

$ filterは関数AngularJSではありません

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

上記は、controller内で$http.get$filterを使用しようとしているコードの例です。

唯一の問題は、そのように使用すると、コンソールログに$filter is not a functionというエラーがスローされることです。

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

それらを入れ替えると、$http is undefinedというエラーがスローされます。

12
ngplayground

使用している場合

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

変数_$filter_は実際には_$http_のインスタンスであり、_$http_は_$filter_のインスタンスです。実際には、function(...)paramsに何が書かれているかは関係ありません。

ここで重要なのは、たとえば、使用している注射剤の順序です。

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

インスタンスにマップされます:

  • a->スコープ
  • b-> $ http
  • c-> $ filter

angular docs:

Angularは、引数の名前からコントローラーのコンストラクター関数へのコントローラーの依存関係を推測するため、PhoneListCtrlコントローラーのJavaScriptコードを縮小すると、その関数の引数もすべて縮小されます。依存性注入器はサービスを正しく識別できません。

したがって、youtコントローラーに配列表記を使用することで、コードが縮小された後にコードが機能することを確認できます。

24
domakas

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' });
        }
1
Gajender Singh

私の場合、期待されるリストオブジェクトがnullでないことを確認することにより、期待されるデータのリストオブジェクトはnullになります。私はこのエラーを回避することができます。

0
Ravi