gpt4 book ai didi

javascript - 如何在 angularJS 中参数化 $resource 调用?

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

我有这个工厂:

angular.module('core.actor').factory('Actor', ['$resource',
function ($resource) {
return $resource('api/actor/:actorId/', {}, {
query: {
method: 'GET',
isArray: true,
cache: true
},
update: {
method: 'PUT'
}
});
}
]);

这是我的分页功能的一部分:

if (self.pk == "-6" && self.searchTerm == undefined) {
self.actorsToAdd = Actor.query({
offset: pageOffset,
limit: pageLimit
})
} else if (self.pk == "-6") {
self.actorsToAdd = Actor.query({
offset: pageOffset,
limit: pageLimit,
search: self.searchTerm
})
} else if (self.searchTerm == undefined) {
self.actorsToAdd = Actor.query({
offset: pageOffset,
limit: pageLimit,
pk: self.pk.toString()
})
} else {
self.actorsToAdd = Actor.query({
offset: pageOffset,
limit: pageLimit,
search: self.searchTerm,
pk: self.pk.toString()
})
}

它根据特定条件更改 Actor 生成的 GET 请求。我正在寻找一种参数化此函数的方法,以便我能够用变量替换“Actor”。

大致如下:

pageType = Movie;

var page = function (pageType){

self.itemsToAdd = pageType.query({
offset: pageOffset,
limit: pageLimit
})
}

这可能吗?如果是这样,怎么办?

最佳答案

这就是我的做法,不是将单个参数传递到查询中,而是传递一个包含查询参数的对象。

angular.module('core.actor').factory('Actor', ['$resource',
function ($resource) {
return $resource('api/actor/:actorId/', {}, {
query: {
method: 'GET',
isArray: true,
cache: true,
params: { queryParams: '@_queryParams' }
},
update: {
method: 'PUT'
}
});
}
]);

所以你对它的调用看起来像这样

Actor.query({ queryParams: {
offset: pageOffset,
limit: pageLimit,
pk: self.pk.toString()
}})

然后在服务器上,我查看我的(json 解析的)参数中包含哪些值,以便在数据库上构建适当的查询。

在您发表最新评论后,这是您正在寻找的东西吗?

angular.module('core.actor').factory('Api', ['$resource',
function ($resource) {
return {
actor: $resource('api/actor/:actorId/', {}, {
query: {
method: 'GET',
isArray: true,
cache: true,
params: {queryParams: '@_queryParams'}
},
update: {
method: 'PUT'
}
}),
movie: $resource('api/move/:moveId/', {}, {
query: {
method: 'GET',
isArray: true,
cache: true,
params: {queryParams: '@_queryParams'}
},
update: {
method: 'PUT'
}
})
};
}
]);

然后您可以调用 Api.movi​​e.query() 或 Api.actor.query()

为了完整起见,以下是构建查询时服务器端代码的外观。

var constructUserQuery = function (queryParams) {
var query = { $or: [], $and: [] };

if (queryParams.name) {
query.$and.push({ displayName: { $regex: queryParams.name, $options: 'i'} });
}

if (queryParams.client) {
query.$or.push({ client: mongoose.Types.ObjectId(queryParams.client) });
}

if (queryParams.roles) {
query.$or.push({ roles: { $in: queryParams.roles }});
}

// Ignore the current user, if it's supplied
if (queryParams.user) {
query.$and.push({ _id: { $ne: queryParams.user._id }});
}

// Clean up any empty arrays
if (query.$or.length === 0) {
delete query.$or;
}

if (query.$and.length === 0) {
delete query.$and;
}

return query;
};

显然这是针对我的情况的,但你明白了。这是我唯一有 if 语句的地方。

关于javascript - 如何在 angularJS 中参数化 $resource 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38480471/

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