当base href存在时,通过更新location.path来更改UI路由器状态

时间:2017-04-17 11:23:39

标签: javascript angularjs routing angular-ui-router

我正在使用的应用有一个基础href

<base href="/xyz/">

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

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

并获取我正在做的当前网址

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

这回报我

/xyz/abc/:def/:ghi

当我执行$ state.go来转到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,任何想法如何通过更新位置使其工作?

1 个答案:

答案 0 :(得分:1)

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

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