2

ファイルにフィルターを追加したところ、みんな大好きなインジェクター エラーが発生しました。トラブルシューティングを試みていますが、注射の順序に関係しているのではないかと思います。プロバイダー/サービス/などを注入する前にコンパイルする必要がある順序をどのように宣言しますか...

HTML:

<script src="js/app.js"></script>
<script src="js/directives/jokesDirective.js"></script>
<script src="js/filters/jokeFilter.js"></script>
<script src="js/providers/jokeService.js"></script>
<script src="js/controllers/mainController.js"></script>

app.js:

angular.module('jsekoApp', [ 'ui', 'ngRoute', 'ngSlider'])
  .config( ... );

mainController.js:

angular.module('jsekoApp')
  .controller('MainController', [ '$scope', 'JokeFilter', 'JokeService', function MainController($scope, JokeFilter, JokeService) {
    ...
  }]);

JokeService は正常に動作します
JoeFilter がエラーをスローしているものです - JoeFilter.js:

angular.module('jsekoApp')
  .filter('JokeFilter', [ '$scope', function JokeFilter($scope) {
    ...
  }]);

メイン コントローラーでは、サービスがフィルターを必要とするため、サービスの前にフィルターを宣言します。これは正しいと思います。また、サービスの前、angular およびその他の同様の依存関係の後に、HTML でフィルターを宣言します。

完全なエラー:

Error: [$injector:unpr] Unknown provider: JokeFilterProvider <- JokeFilter
http://errors.angularjs.org/1.2.17/$injector/unpr?p0=JokeFilterProvider%20%3C-%20JokeFilter
    at http://127.0.0.1:9000/bower_components/angular/angular.js:78:12
    at http://127.0.0.1:9000/bower_components/angular/angular.js:3735:19
    at Object.getService [as get] (http://127.0.0.1:9000/bower_components/angular/angular.js:3862:39)
    at http://127.0.0.1:9000/bower_components/angular/angular.js:3740:45
    at getService (http://127.0.0.1:9000/bower_components/angular/angular.js:3862:39)
    at invoke (http://127.0.0.1:9000/bower_components/angular/angular.js:3889:13)
    at Object.instantiate (http://127.0.0.1:9000/bower_components/angular/angular.js:3910:23)
    at http://127.0.0.1:9000/bower_components/angular/angular.js:7164:28
    at link (http://127.0.0.1:9000/bower_components/angular-route/angular-route.js:913:26)
    at nodeLinkFn (http://127.0.0.1:9000/bower_components/angular/angular.js:6607:13) <div class="container-fluid ng-scope" ng-view=""> angular.js:9899
(anonymous function) angular.js:9899
(anonymous function) angular.js:7246
nodeLinkFn angular.js:6610
compositeLinkFn angular.js:6011
publicLinkFn angular.js:5916
boundTranscludeFn angular.js:6030
controllersBoundTransclude angular.js:6628
update angular-route.js:871
Scope.$broadcast angular.js:12797
(anonymous function) angular-route.js:552
wrappedCallback angular.js:11408
wrappedCallback angular.js:11408
(anonymous function) angular.js:11494
Scope.$eval angular.js:12518
Scope.$digest angular.js:12330
Scope.$apply angular.js:12622
done angular.js:8234
completeRequest angular.js:8439
xhr.onreadystatechange
4

1 に答える 1

2

あなたが抱えている問題は、フィルターを直接注入しようとしていることです。ここで解決策を参照してください:コントローラーでフィルターを使用する方法は?

基本的に、フィルター自体を直接注入することはできず、使用する必要があります$filter

ここで詳細情報を見つけることができます: https://docs.angularjs.org/api/ng/service/$filter

于 2014-06-09T16:56:32.580 に答える