【问题标题】:Changing UI router state by updating location.path when base href is present存在基本 href 时通过更新 location.path 来更改 UI 路由器状态
【发布时间】:2017-04-17 11:23:39
【问题描述】:

我正在使用的应用程序有一个基本的 href

<base href="/xyz/">

并且状态配置看起来类似于

.state('state1', {
        url: '/abc/:def/:ghi',
        views: 'view1',
    })
    .state('state2', {
   url:'/abc/:def/:ghi/jk/:123/:456',
        views: 'view2',
    })

并获取我正在执行的当前 URL

var browserUrl = $state.href($state.current.name, $state.params, { absolute: false });

这还给我

/xyz/abc/:def/:ghi

当我执行 $state.go 到 goto state2 时没有问题,但如果我使用 $location.path 更新 URL,则 UI 路由器无法匹配状态,因为基本 href 存在于 newUrl .更新我正在做的状态

var 123Id = 'item1'                                                               
var 456Id = 'item2'
var newUrl = [browserUrl, 'jk', 123Id, 456Id].join('/');
$location.path(newUrl) 

这不起作用,因为 browesrUrl 包含基本 href,知道如何通过更新位置来使其工作吗?

【问题讨论】:

  • 为什么browserUrl 包含完整的browserUrl?您能否将browserUrl 的输出添加到您的join() 函数中?
  • @lin 它有基本的href,因为我使用$state.href 来动态生成url

标签: javascript angularjs routing angular-ui-router


【解决方案1】:

一个简单的解决方法是使用$location.url() 而不是$location.path()url() 能够处理绝对 URL,您可以生成一个绝对 URL,例如:

var browserUrl = $state.href($state.current.name, $state.params, { absolute: true });
$location.url(browserUrl);

【讨论】:

  • 而不是做 $state.href($state.current.name, $state.params, { absolute: true });使用 $location.path() 解决了我的问题。但我已经测试了你的解决方案,它也很有效
  • @Venkat 很高兴为您提供帮助。我想知道它也可以与 $location.path() 一起使用,因为它以不同的方式记录“路径应该以 / 开头”...跨度>
猜你喜欢
  • 2016-10-21
  • 2018-01-05
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 2017-05-15
  • 1970-01-01
相关资源
最近更新 更多