1

我有一个服务叫MyArticles. 使用$http GET,收集给定类别的所有文章。MyArticles服务被注入, ControllerA, ControllerB,解决ControllerC后应该运行一些命令MyArticles Promise

在第一次初始化后工作,但如果我需要 reset() MyArticles 的加载数据,我不知道该怎么做,因为在ControllerA, ControllerB, ControllerC承诺解决后,第一次运行中的命令。例如,如果我想从不同的 Category 获取 Articles 怎么办?

我试图为此找到一个模式,我写了以下内容,我想这有助于理解我想要实现的目标:

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

另一种选择是使用手表。请参阅:http ://plnkr.co/edit/auovRxGPViyflUVPvG1A?p=preview 。与稍后的 $emit/$broadcasts 相比,它可能更容易维护,尤其是当您最终拥有大量服务以及使用它们的指令和控制器时。

此外,您可能想考虑使用 angular 的自然范围继承,但这取决于您的应用程序。

于 2013-10-02T01:59:17.300 回答