Javascript 在AngularJS中的控制器之间共享数据

Javascript 在AngularJS中的控制器之间共享数据,javascript,angularjs,angular-resource,angular-promise,angular-services,Javascript,Angularjs,Angular Resource,Angular Promise,Angular Services,我使用以下工厂从API获取数据,并将其存储到名为apiData的局部变量中 app.factory('MyFactory', function($resource, $q) { var apiData = []; var service = {}; var resource = $resource('http://example.com/api/sampledata/'); service.getApiData=function() { va

我使用以下工厂从API获取数据,并将其存储到名为apiData的局部变量中

app.factory('MyFactory', function($resource, $q) {

    var apiData = [];
    var service = {};

    var resource = $resource('http://example.com/api/sampledata/');

    service.getApiData=function() {
        var itemsDefer=$q.defer();
        if(apiData.length >0) {
            itemsDefer.resolve(apiData);
        }
        else
        {
            resource.query({},function(data) {
                apiData=data;
                itemsDefer.resolve(data)
            });
        }
        return itemsDefer.promise;
    };

    service.add=function(newItem){
        if(apiData.length > 0){
            apiData.push(newItem);
        }
    };

    service.remove=function(itemToRemove){
        if(apiData.length > 0){
            apiData.splice(apiData.indexOf(itemToRemove), 1);
        }
    };

    return service;

});
我通过以下方式将apiData注入控制器:

 $routeProvider
    .when('/myview', {
        templateUrl: 'views/myview.html',
        controller: 'MyController',
        resolve: {
            queryset: function(MyFactory){
                return MyFactory.getApiData();
            }
        }
    })

app.controller('MyController', ['$scope', 'queryset',
    function ($scope, queryset) {
        $scope.queryset = queryset;
    }
]);
在不同的控制器之间共享承诺是一种好方法,还是使用本地存储甚至cacheFactory更好

如何重写MyFactory的add()和remove()方法,使共享变量保持当前状态(无需API更新/创建/删除调用)


谢谢大家!

您应该使用$resource来获取$promise,例如:
resource.query().$promise
而不是
$q.defer()
来获取更干净的代码。否则你就可以走了。您可以使用
$cacheFactory
,但也可以使用本地变量

您的共享变量不是处于当前代码的当前状态吗

我建议您查看及其嵌套和抽象视图,其中已解析的值可供子控制器使用。

可能重复的