2015-10-27 15 views
8

私は、カスタムフィルタを実装しようとしているが、私は次のエラーを取得する:不明プロバイダ

Error: [$injector:unpr] Unknown provider: removeCharsFilterProvider <- removeCharsFilter

従うように私のプロジェクトの構造がある...

app.js:

var app = angular.module('myApp', ['ionic']) 

myController.js:

app.controller('myController', ['$scope', 'removeChars', 
    function($scope, removeChars) { 
    //... 
    } 
]); 

removeCharsFilter.js:

app.filter('removeChars', function() { 
    return function(input) { 
    return input.replace(/-/g, '').replace(/>/g, ''); 
    }; 
}); 

myView.html:私はなぜこれが起こっている見当がつかない

<!-- your app's js --> 
<script src="js/app.js"></script> 

<!-- filters --> 
<script src="js/filters/removeCharsFilter.js"></script> 

<!-- controllers --> 
<script src="js/controllers/myController.js"></script> 

<div ng-controller="myController"> 
<p>{{person.name | removeChars}}</p> 
</div> 

index.htmlを、私の知る限りでは、これがありますうまくいくはずです。私が紛失しているものは見えますか?

+0

あなたはapp.jsファイルの依存関係としてフィルタを追加しようとしましたか?このように:var app = angular.module( 'myApp'、['ionic'、 'removeChars']) –

+0

@Daedalus非常によく見られる!しかし、私はまだ同じエラーが発生することを修正した後に... – Tiwaz89

+0

@FurkanBasaranそれはどちらもうまくいきませんでした... – Tiwaz89

答えて

7

まず、コントローラにフィルタを挿入する必要はありません。これらはメインアプリケーションの一部であり、任意のコントローラで$filterサービスを使用して使用できます。

Filters are not independent singleton objects hence no need to include as a dependency.

これをコントローラに追加したので、サービスまたはファクトリがシングルトンであるため、注入する必要があります。あなたの場合は、サービスではなくフィルタがあります。

コントローラから最初にremoveCharsを削除します。そこにないサービスや工場を探しているので、$インジェクタエラーが発生します。コントローラでフィルタを使用する場合は、bleowを使用します。ビューにフィルタを使用したい場合は

app.controller('myController', ['$scope', '$filter', 
    function($scope, $filter) { 
    //use it like below if you want to perform filters on data in controller 
    $scope.someData = $filter('removeChars')(data); 

    } 
]); 

、必要が直接、その依存関係を管理していない使用している方法のようなビューで使用します。

はしたがって結論は、それらがシングルトンないので

  1. フィルタはコントローラの依存関係としてロードすることができません。

  2. フィルタービューで$フィルタ

  3. を使用して、コントローラで使用することができ、彼らは直接

は、この情報がお役に立てば幸い|パイプセパレータを使用して、データに適用することができます!

0

あなたは、あなたが外であなたの依存関係にフィルターサフィックスを追加する必要がビューからフィルターのために必要なD.I. documentation of AngularJSによると、間違った方法で を$インジェクタを使用しているため、このエラーを持っていますこれは$ injectorにフィルタが必要であることを伝えます。以前のコメントで述べたよう

angular.module('test', []).controller('TestCtrl', function(dateFilter) { console.log('DateFilter is', dateFilter); }); 

$へのもう一つの方法は、フィルタを注入し、$フィルタサービスにあなたのフィルタを要求することです。

関連する問題