AngularJS UI-Router:带参数获取状态的绝对 URL

Posted

技术标签:

【中文标题】AngularJS UI-Router:带参数获取状态的绝对 URL【英文标题】:AngularJS UI-Router : Get the absolute URL of the state with the parameters 【发布时间】:2014-08-21 12:42:19 【问题描述】:

我希望能够在不更改状态的情况下更改地址的 URL,以防止重新呈现。根据我的搜索,ui-router 目前不提供此功能,但来自 anuglar 的$location.path 提供。

所以,很自然地,我想使用$state.get(stateName) 来访问该州的 URL,这样我就不用手动输入 URL。

我有两个问题:

    $state.get(stateName) 仅返回相对路径。如何获取绝对路径? 它还返回状态的定义,参数未定义。如何获取带参数的 URL?

例如,如果我有一个名为user.home.viewuser.home 的状态,我将我的状态定义为

'user': 
     abstract: true,
     url: '^/users/'
,
'user.home': 
     url: ''
,
'user.home.view': 
     url: ':id/'

所以现在,$state.get(user.home.view).url 返回:id/。如何获取完整的 URL(即/users/5/)?

【问题讨论】:

【参考方案1】:

你应该使用$state.href()

    要获取绝对 URL,您可以使用:

    $state.href('user.home.view', , absolute: true);

    要获取带有参数的 URL,您需要将它们添加为第二个参数

【讨论】:

你能扭转这个吗?从 href 中获取状态? 我建议看看 ui.router.util angular-ui.github.io/ui-router/site/#/api/…【参考方案2】:

怎么样:

$state.href($state.current.name, $state.params, absolute: true)

【讨论】:

最实用最完整的答案!【参考方案3】:

为了获取不带参数的绝对网址,我发现我需要传递inherit: false,例如:

$state.href('home', , absolute: true, inherit: false)

没有inherit: false,我得到了任何/所有可能存在的参数。

【讨论】:

以上是关于AngularJS UI-Router:带参数获取状态的绝对 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AngularJS 的 ui-router 提取查询参数?

angularJs的ui-router总结

angularjs ui-router传值

AngularJS进阶 八 实现页面跳转并进行参数传递

AngularJS ui-router (嵌套路由)

ui-router 中的 AngularJS 组件/范围问题