gpt4 book ai didi

angularjs - 如何创建服务的多个实例(或者,我应该使用什么来代替服务?)

转载 作者:行者123 更新时间:2023-12-02 23:28:28 25 4
gpt4 key购买 nike

我是 Angular 新手,我认为我错误地使用了服务。

我有三个 Controller ,它们使用来自 REST 后端的数据(使用 Restangular)。每个端点不同,但数据结构相同。

我拿到数据后,要做一些简单的业务逻辑,然后才能在页面中使用,并且我想将数据缓存在本地。但这意味着我有三个具有双倍代码的 Controller 。不好。

我想集中它,让 Controller 只要求一个“版本”。我想我应该创建一个包装 Restangular 的 Angular Service,然后创建它的三个副本,每个副本都有不同的端点和自己的状态。

但是服务是单例的,所以我想这是错误的。

伪代码...

..MyDataService(..., dataEndpoint)
{
...
var stuff = []

construct() {
this.stuff = Restangular.getData(...)
}

getSmallest() {
return this.stuff.sort(...)
}
getLatest() {
return this.stuff.sort(...)
}
getBiggest() {
return this.stuff.sort(...)
}
}


...RedStuffController()
{
$scope.data = MyService('/things/redstuff/')
}
...BlueStuffController()
{
$scope.data = MyService('/things/blue')
}
...GreenStuffController()
{
$scope.data = MyService('/things/green')
}

我应该做什么?

最佳答案

您可以做的是使用工厂创建服务构造函数并返回它。它看起来像这样。

app.factory('MyService',function(Restangular) {
function MyService(url) {
this.stuff = Restangular.getData(url)
}
MyService.prototype.getSmallest=function() {
return this.stuff.sort(...)
}
return MyService; //We are not returning service object but service constructor function
});

现在在 Controller 中注入(inject)它,你就可以这样做

$scope.data = new MyService('/things/green').getSmallest();

关于angularjs - 如何创建服务的多个实例(或者,我应该使用什么来代替服务?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25009063/

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