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

首次初始化后可以工作,但是如果需要对MyArticles的加载数据进行reset()重置,我不知道该怎么办,因为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/

我想知道如果我需要使用诺言的服务,该服务应该能够刷新数据并且将服务注入到不同的Controller等中,该怎么办?

感谢您的光临!

最佳答案

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

另外,您可能想考虑使用角度继承继承的自然作用域,但这取决于您的应用程序。

10-06 08:13