如何在Service中创建返回promise的reset()方法?

时间:2013-10-01 21:22:00

标签: javascript angularjs promise angularjs-service

我有一项名为MyArticles的服务。使用$http GET,收集给定类别的所有文章。 MyArticles服务注入了ControllerAControllerBControllerC,应在MyArticles Promise解析后运行一些命令。

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

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

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/

我想知道我能做什么,如果我需要一个服务 - 使用promises - 应该能够刷新数据并且服务被注入不同的控制器等等?

感谢您的期待!

1 个答案:

答案 0 :(得分:3)

另一种选择是使用手表。见:http://plnkr.co/edit/auovRxGPViyflUVPvG1A?p=preview。与$ emit / $ broadcasts相比,它可能更容易维护,特别是如果你最终拥有大量服务以及使用它们的指令和控制器。

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