使用诺言在控制器之间共享数据? [英] Sharing data between controllers using promises?

查看:53
本文介绍了使用诺言在控制器之间共享数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好的,我在服务中具有此功能:

Okay, I have this function in a service:

wikiServices = angular.module('wikiServices', []);

wikiServices.factory('newsService', function($http, $q){
 var chosenNewsStory = "";

 var getNewsStory = function(news_id, callback){
    var deferred = $q.defer();
    $http({
        method: "GET",
        url: "news/article/" + news_id
    })
    .success(function(newsStory){
        deferred.resolve(newsStory);
        console.log("RESOLVED " + newsStory);   
    });
    return deferred.promise;
 });

控制器1:

wikiControllers =  angular.module('wikiControllers', []);
wikiControllers.controller('ctrl1', ['$scope', 'newsService',
  function($scope, newsService){
   $scope.getNewsStory = newsService.getNewsStory(function(input){
     newsService.getNewsStory(news_id);
   };
});

控制器2:

wikiControllers =  angular.module('wikiControllers', []);
wikiControllers.controller('ctrl1', ['$scope', 'newsService',
  $scope.watch('newsService.chosenNewsStory', function(newVal){
     console.log(newVal);
  });
});

现在,我尝试在很多地方在服务中设置"chosenNewsStory",但我想我缺少了整个JS的关键部分-体验".

Now, I have tried setting "chosenNewsStory" in the service a lot of places buyt I think I'm missing a key part of the whole JS-"experience".

我在将服务中的"var selectedNewsStory"设置为从服务器获取的newsStory时遇到麻烦.我该怎么办?

I'm having trouble setting "var chosenNewsStory" in the service to the newsStory fetched from the server. How can I do this?

谢谢.

推荐答案

您应该为要共享的变量定义 get set 方法,并将其返回为好吧.我会这样格式化您的服务:

You should define get and set methods for the variable that is being shared, and return these as well. I would format your service like so:

wikiServices.factory('newsService', function($http, $q){
    var chosenNewsStory = "";

    return {
        getNewsStory: function(news_id, callback){
            var deferred = $q.defer();
            $http({
                method: "GET",
                url: "news/article/" + news_id
            }).success(function(newsStory){
                deferred.resolve(newsStory);
                console.log("RESOLVED " + newsStory);   
            });
            return deferred.promise;
        },

        getNews: function() {
            return chosenNewsStory;
        },

        setNews: function(story) {
            chosenNewsStory = story;
        }
    }
});

现在,您将可以观看 newsService.getNews()并使用 newsService.setNews(news)

Now you will be able to watch newsService.getNews() and set it with newsService.setNews(news)

这篇关于使用诺言在控制器之间共享数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆