0

複数のウィジェットを含むページがあります。ページが読み込まれた後、URL を含むウィジェットのリストを取得します。次に、URL を ng-include します。

各ウィジェットには独自のコントローラーがあり<script>、ウィジェット html のタグを使用してロードされます。ウィジェット リストは動的であるため、ページの読み込み時にウィジェット .js ファイルを読み込むことができません。(そうすると、正常に動作します。) エラーが発生し続けます。

コントローラーユニットをテスト可能にするために、サービスで $http 呼び出しをラップしようとしています。

ここに私のHTMLがあります:

<script src="/widget/fooWidget.js"></script>

<div ng-controller="FooWidgetCtrl">
    ...
</div>

そして、これが私のfooWidget.jsです:(Widgetsページの読み込み時に読み込まれるファイルで定義されたモジュールがあります)

Widgets.service('FooWidgetSvc', function($http) {
    this.getSomething = function() {
        // $http methods
    }
});

function FooWidgetCtrl($scope, $http, FooWidgetSvc) {
    FooWidgetSvc.getSomething();
    return $scope.FooWidgetCtrl = this;
}

そして、次のエラーが表示されます。

Error: Unknown provider: FooWidgetSvcProvider <- FooWidgetSvc
at Error (<anonymous>)

angular ブートストラップ プロセスの完了後にサービスを定義しようとしているため、これが発生していると思います。

それが役に立ったら、プランカーを作ることができます。

アップデート

これまでの回答に感謝します。私の問題を説明するのに役立つプランカーを作成しました: http://plunker.co/edit/iKzwnlZ7bNDjmR05qGDC

コントローラーを手動で登録する方法を理解し、それをプランカーに含めました。

4

2 に答える 2

0

これはうまくいきますか?

Widgets.service('FooWidgetSvc', function($http) {
    this.getSomething = function() {
        // $http methods
    }
}).controller('FooWidgetCtrl', function($scope, $http, FooWidgetSvc) {
    FooWidgetSvc.getSomething();
}
于 2013-07-02T00:42:09.500 に答える