gpt4 book ai didi

javascript - AngularJS 中的不同 URL 参数

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:44:43 25 4
gpt4 key购买 nike

一直在寻找这个问题的答案,所以开始怀疑是否可能。

我正在我的 Angular 应用程序中构建一个 routeProvider 配置,它依赖于位置名称和年份参数来聚合数据。理想情况下(虽然不知道是否可能)我希望能够具有以下可能的 url 结构:

'example.com/:country'
'example.com/:country/:year'
'example.com/:country/:state/'
'example.com/:country/:state/:year'
'example.com/:country/:state/:city'
'example.com/:country/:state/:city/:year'

以便用户可以像这样点击 url:'example.com/usa''example.com/usa/2012'(如果他们不这样做提供一年,它只会获取最近几年的数据)显然我在这里遇到了问题,因为当你访问 'example.com/:country/:state/',路由提供者期望 state 是一个年份参数。

我的问题是无论如何都允许这种结构?我不太确定从哪里开始添加允许两者的逻辑,或者如果可能的话,所以非常感谢任何建议。

**编辑 我已经阅读了一些关于 ui.router 和状态参数的内容,虽然我对它知之甚少,但我想知道这是否会以某种方式起作用?

最佳答案

REST 原则建议您的 URL 应该描述您希望检索的资源

这似乎很清楚,但至少在我看来,这仍然意味着两种有效的方法。

HTTP 查询

首先是创建一个定义query 的URL,一个HTTP 搜索您想要的type 资源,然后通过< em>细化参数(被滥用的查询字符串)。在这种情况下,您没有使用 REST URL 本身,而是通过固有的 HTTP 搜索机制搜索一个国家。

这是一种非常有效的方法,可以享受 HTTP 上游缓存的好处。当您使用查询字符串来触发逻辑时,换句话说,当您使用它来指定操作、动词而不是名词(又名 RPC)时,查询字符串只是一个坏事

The Query
'example.com/country'

The Refinement Parameters
- year or
- city or
- state

REST 网址

第二种是面向 REST 的方法,要求每个不同的 country+city+state+year 组合都有自己同样不同的 URL。

我相信这就是您想要实现的目标,但您失败了,因为您试图过于简洁。没有足够的 URL 结构来唯一区分每个可能的资源。

要解决这个问题,您只需要添加更多 URL 结构 - 如下所示:

//Syntax for ui.router
'example.com/country/{country}'
'example.com/country/{country}/year/{year}'
'example.com/country/state/{state}'
'example.com/country/state/{state}/year/{year}'
'example.com/country/state/{state}/city/{city}'
'example.com/country/state/{state}/city/{city}/year/{year}'

您可以将所有这些路由连接到同一个 Controller 并在那里放置逻辑,或者将它们划分到各个 Controller 之间,因为它们收到的数据必须存在。

这是我通常使用的方法,虽然起初感觉 URL 正在成倍增加,而且它们又长又繁琐,但实际应用该技术却很好,而且 URL 清晰、简单如果需要,机器生成,并 self 记录。

最后一点,如果您将 ui.routerAngularJS 一起使用,通常情况下您可以美化面向公众 URL,用户将看到的那些。毕竟对于 SPA,它们实际上并没有“去”任何地方,而是指定了客户端浏览器的内部状态,这样您就可以了解它们对您的意义。您将使用的大部分 URL 都是隐藏的 API 调用,它们可以而且应该尽可能地具有表现力,即使它们很长并且乍一看很麻烦。

简而言之,对于 API 调用而言,清晰而不是简洁是一件好事。

关于javascript - AngularJS 中的不同 URL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21150307/

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