2017-04-17 47 views
1

我工作的应用程序有一个基本href通过时基本href是目前更新location.path更改UI路由器状态

<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 }); 

当前的URL这回我

/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状态,任何想法如何通过更新位置,使这方面的工作?

+0

为什么'包含完整browserUrl browserUrl'?你可以把'browserUrl'的输出添加到你的'join()'函数中吗? – lin

+0

@lin它拥有基础href,因为我使用$ state.href动态生成url – Venkat

回答

1

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

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

而不是执行$ state.href($ state.current.name,$ state.params,{absolute:true});使用$ location.path()解决了我的问题。但我已经测试了你的解决方案,并且它的工作太 – Venkat

+0

@Venkat很高兴帮助ya.I'm想知道它也可以用'$ location.path()',因为它以不同的方式记录“一个路径应该以' /'” ...... – lin

相关问题