gpt4 book ai didi

javascript - 在 AngularJS 中的 Controller 之间共享数据

转载 作者:行者123 更新时间:2023-12-03 11:25:46 25 4
gpt4 key购买 nike

我使用以下工厂从 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 注入(inject)到我的 Controller 中:

 $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;
}
]);

这是在不同 Controller 之间共享 promise 的好方法,还是我最好使用本地存储甚至 cacheFactory?

我如何重写 MyFactory add() 和 remove() 方法,以便我可以将我的共享变量保持在当前状态(不需要 API 更新/创建/删除调用)?

谢谢!

最佳答案

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

您的共享变量是否处于当前代码的当前状态?

我建议你看看ui-router及其嵌套和抽象 View ,其中已解析的值可供子 Controller 使用。

关于javascript - 在 AngularJS 中的 Controller 之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26445725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com