gpt4 book ai didi

angularjs - 如何将资源与两个不同的服务集成以使用它们提供的参数查询服务器?

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

我正在学习 Angular,但我不喜欢我目前的方法。当前 Controller 首先使用 Geolocation 服务,当 getLocation() 解析时,将使用位置参数调用 Pagination 服务。有没有更好的解决方案来提供一项查询服务器位置的服务?我可以集成当前逻辑并直接通过 Post 工厂移动或使用 Pagination 服务,并在解析后使用给定页面和位置的参数查询服务器吗?我想通过仅调用一种资源方法来加载新数据,例如来自 loadPage() 函数的范围。我该如何重构这段代码?

app.controller('MainCtrl',['$scope','Post','Pagination','Geolocation'
($scope, Post, Pagination, Geolocation) ->
$scope.posts = []
Geolocation.getLocation().then (location) ->
Pagination.paginate $scope, Post, 10, (postsRes) ->
$scope.posts.push posts for posts in postsRes
, params: {location: location}
])

app.factory 'Post', ($resource) ->
$resource '/posts/:id.json', { id: '@id' }

app.service "Geolocation", ['$q', '$window', ($q, $window) ->
@getLocation = ->
deferred = $q.defer()
return deferred.resolve @loc if @loc
if $window.navigator and $window.navigator.geolocation
$window.navigator.geolocation.getCurrentPosition (position) ->
@loc = position.coords
deferred.resolve position.coords
deferred.promise
]
app.service 'Pagination', ->
@paginate = ($scope, @resource, @maxElemPerPage=10, @onNewPage, @query={}) ->
@page = 1
@canLoadNextPage = true
$scope.loadPage = (promise) =>
return promise.resolve() unless @canLoadNextPage
@load promise

@load = (promise) =>
@canLoadNextPage = false
q = angular.extend @query, page: @page
@resource.query q, (resources) =>
@canLoadNextPage = true if resources.length is @maxElemPerPage
@page++
@onNewPage resources if @onNewPage
promise.resolve() if promise

@load()
@

最佳答案

创建一个包装这两个服务的单个服务,让它创建自己的 promise 来执行调用并声明这两个服务的回调并返回 promise 。一旦第二次服务返回,兑现您的 promise 。

关于angularjs - 如何将资源与两个不同的服务集成以使用它们提供的参数查询服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28521454/

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