Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何让angularjs工厂只获取一次http数据?_Javascript_Angularjs - Fatal编程技术网

Javascript 如何让angularjs工厂只获取一次http数据?

Javascript 如何让angularjs工厂只获取一次http数据?,javascript,angularjs,Javascript,Angularjs,我使用工厂在多个控制器之间共享数据,这是我的工厂 var szGetData = "some url that works"; myApp.factory('Data', function ($http) { var eventData = {}; eventData.getEvent = function (event) { return $http.get(szGetData, event);

我使用工厂在多个控制器之间共享数据,这是我的工厂

    var szGetData = "some url that works";
    myApp.factory('Data', function ($http) {
        var eventData = {};
        eventData.getEvent = function (event) {
                return $http.get(szGetData, event);
            }
        return eventData;
    });
在我的控制器中,我对每个工厂的调用方式相同,如下所示:

        Data.getEvent()
            .success(function (event) {
                $scope.eventData = event;

            })
            .error(function (error) {
                $scope.status = 'Unable to load customer data: ' + error.message;
            });

这一切都是可行的,我得到了数据,但它调用了我的web服务三次,每个控制器都有自己的数据副本。我希望让控制器处理相同的数据,并且只调用web服务一次。感谢您的建议。

您可以跟踪待定的承诺,并将相同的承诺返回给所有后续来电者

或者,如果请求失败,您可以“重置”承诺,以便下次调用
getEvent
时(失败后)它将重试

var szGetData = "some url that works";
myApp.factory('Data', function ($http) {
    var eventData = {};
    var promise;
    eventData.getEvent = function (event) {
        if(!promise){
            promise = $http.get(szGetData, event)
                .error(function(){ // this is optional
                    promise = false;
                });
        }
        return promise;
    }
    return eventData;
});

您可以跟踪挂起的承诺,并将相同的承诺返回给所有后续调用方

或者,如果请求失败,您可以“重置”承诺,以便下次调用
getEvent
时(失败后)它将重试

var szGetData = "some url that works";
myApp.factory('Data', function ($http) {
    var eventData = {};
    var promise;
    eventData.getEvent = function (event) {
        if(!promise){
            promise = $http.get(szGetData, event)
                .error(function(){ // this is optional
                    promise = false;
                });
        }
        return promise;
    }
    return eventData;
});

谢谢,这就是我要找的!谢谢,这就是我要找的!