1

というサービスがありますMyArticles。を使用$http GETして、特定のカテゴリのすべての記事を収集します。サービスは、、 にMyArticles挿入されControllerA、が解決された後にいくつかのコマンドを実行する必要があります。ControllerBControllerCMyArticles Promise

ControllerA, ControllerB, ControllerC最初の初期化後に機能しますが、プロミスが解決された後、コマンドが初めて実行されるため、MyArticles のロードされたデータを reset() する必要がある場合はどうすればよいかわかりません。たとえば、別の Category から記事を取得したい場合はどうすればよいですか?

私はこれのパターンを見つけようとしており、次のように書いています。私が達成したいことを理解するのに役立つと思います:

var MyApp = angular.module('MyApp', []);

MyApp.config(function($locationProvider){

  $locationProvider.hashPrefix('!');

});

MyApp.factory('MyService', function($q,$timeout){

    var deferred;

    var loadData = function(){

        deferred = $q.defer();

        $timeout(function(){
            deferred.resolve({ 
                myData: "test"
            });
        }, 250);

    };

    return {

        reset: function(){

            loadData();

        },

        getPromise: function(){

            return deferred.promise;

        }

    };

});

MyApp.controller('MyCtrl', function($scope,MyService){

  $scope.foo = "Service share data";

  MyService.reset();

  MyService.getPromise().then(function(data){

        console.log(data);

  });

});

*例は、http: //jsbin.com/OCaNehe/2/でも入手できます。

約束を使用してデータを更新できるサービスが必要で、サービスが別のコントローラーなどに注入されている場合、何ができるのだろうか?

ご覧いただきありがとうございます。

4

1 に答える 1

3

もう 1 つの方法は、時計を使用することです。http://plnkr.co/edit/auovRxGPViyflUVPvG1A?p=previewを参照してください。後で $emit/$broadcasts に比べて保守が容易になる可能性があります。特に、大量のサービスと、それらを使用するディレクティブおよびコントローラーが必要になる場合はなおさらです。

また、angular が持つ自然なスコープ継承の使用を検討することもできますが、それはアプリケーションによって異なります。

于 2013-10-02T01:59:17.300 に答える