找到给定URL的ui.router状态

时间:2015-12-11 05:40:27

标签: angularjs regex coffeescript angular-ui-router

TL:博士;

我正在尝试遍历$state.get()中的每个状态,以查看当前网址是否与其中一个州的模式匹配。

前言

我的所有应用程序状态都继承自基本抽象状态,该状态利用已解析的依赖关系来确保用户在加载状态之前已登录。

抽象状态

$stateProvider.state 'nx', state =
    abstract: true
    url: ''
    template: '<ui-view></ui-view>'
    resolve: { session: [
            '$q'
            'coreService'
            ($q, sessionService)->
                sessionService.withSession()
                .then (rsp)-> rsp
                .catch (err)-> $q.reject err
        ]}

示例子状态

此状态继承所有已解析的依赖项。

$stateProvider.state 'test', state =
    parent: 'nx'
    url: '^/2112'
    controller: class TestController
        constructor: (@session)-> # the resolved session data, assuming it's valid
    controllerAs: 'vc'
    templateUrl: './views/view.sandbox.html'

问题

在某些情况下,用户尚未登录,因此已解决的会话数据错误。用户登录后,我通过以下代码触发重新加载:

登录后重新加载

$state.go($state.current, {}, {reload:true})

当应用程序首次加载时,如果用户尚未登录,则预期状态不会加载,使应用程序处于初始抽象状态。由于您无法直接导航到抽象状态,因此会抛出错误:

  

错误:无法转换为抽象状态'[object Object]'

尝试解决方案

我希望循环遍历$state.get()中的所有已注册状态,并针对每个状态检查当前URL以查看是否存在匹配,然后将该状态用于重新加载逻辑。像这样:

url = $location.path()
for state in $state.get()
   if url matches state.url # pseudo-code here
       $state.go(state, {}, {reload:true})

问题是我没有办法将当前网址与州的网址格式相匹配。它不是标准的正则表达式,在尝试定义UrlMatcher时,我似乎无法加载任何状态。

0 个答案:

没有答案