我正在尝试遍历$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时,我似乎无法加载任何状态。