如何从return函数中获取对Javascript变量的访问权限?

时间:2015-01-08 02:18:44

标签: javascript angularjs closures

    function storyData($http, $q) {
        var URL = 'stories.json';

        var storyCache = [];

        this.getStories = function() {
            var deferred = $q.defer();

            alert(URL);

            $http({method: 'GET', url: URL})
                .success(function (data, status, headers, config) {
                    storyCache = data;
                    alert(storyCache); //correct data appears in the alert window, but this doesn't set the instance storyCache variable for some reason

                    deferred.resolve(data);
                })
                .error(function (data, status, headers, config) {
                    deferred.reject(status);
                });

            return deferred.promise;
        };

        this.stories = function() {
            return storyCache;
        }
    }

我的应用 -

'use strict';

var angularApp = angular.module('ccsApp', ['ngRoute', 'ngAnimate', 'ui.bootstrap']);

angularApp.config(['$routeProvider',
    function($routeProvider) {
        $routeProvider.
            when('/', {
                templateUrl: 'stories.html',
                controller: 'StoryController as StoryCtrl',
                resolve: {
                    stories: function(storyData) {
                        return storyData.getStories();
                    }
                }

            })
            .otherwise({
                redirectTo: '/'
            });
    }
]);

在我的控制器中,我没有注入"故事"来自routeProvider的值,以便我可以使用我的服务。

为什么我无法在$ http方法中更改storyCache?我确信这是非常简单的事情,但我的研究并没有让我得到答案。提前感谢您的帮助。

异步。这方面工作正常,不是问题。我确保通过使用routeProvider上的resolve对象来获取数据。另外,我确保在deferred.resolve(data)方法执行之前通过在其上发出警报来获取数据。我没有解决方案,但在使用异步时出错。也不是解决方案。

0 个答案:

没有答案