AngularJs UI路由器-页面刷新$state.current现在为空

AngularJs UI路由器-页面刷新$state.current现在为空,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我有一个使用ui路由器的Angular应用程序,每当我刷新页面时都会出现问题。我使用嵌套视图、命名视图来构建应用程序。每当我刷新页面时,ui路由器不会重新加载当前状态,只会将页面留空 页面加载时$state。当前等于 Object {name: "", url: "^", views: null, abstract: true} 我正在通过$http从.json文件读取导航,并在各州之间循环。这就是我能展示的: stateProvider.state(navElement.stateName,

我有一个使用
ui路由器的
Angular
应用程序,每当我刷新页面时都会出现问题。我使用嵌套视图、命名视图来构建应用程序。每当我刷新页面时,
ui路由器
不会重新加载当前状态,只会将页面留空

页面加载时
$state。当前
等于

Object {name: "", url: "^", views: null, abstract: true}
我正在通过
$http
.json
文件读取导航,并在各州之间循环。这就是我能展示的:

stateProvider.state(navElement.stateName, {
    url: navElement.regexUrl ? navElement.regexUrl : url,
    searchPage: navElement.searchPage,   //something custom i added
    parent: navElement.parent ? navElement.parent : "",
    redirectTo: navElement.redirectTo,
    views: {
        'subNav@index': {
            templateUrl: defaults.secondaryNavigation,
            controller: 'secondaryNavigationController as ctrl' //static
        },
        'pageContent@index': {
            template: navElement.templateUrl == null 
                                              ? '<div class="emptyContent"></div>' 
                                              : undefined,
            templateUrl: navElement.templateUrl == null 
                                              ? undefined 
                                              : navElement.templateUrl,
            controller: navElement.controller == null 
                                              ? undefined 
                                              : navElement.controller + ' as ctrl'
        }
    }
});
stateProvider.state(navElement.stateName{
url:navElement.regexUrl?navElement.regexUrl:url,
searchPage:navElement.searchPage,//我添加了一些自定义内容
父项:navElement.parent?navElement.parent:“”,
重定向至:navElement.redirectTo,
观点:{
'subNav@index': {
templateUrl:defaults.secondaryNavigation,
控制器:“secondaryNavigationController as ctrl'//静态
},
'pageContent@index': {
模板:navElement.templateUrl==null
? '' 
:未定义,
templateUrl:navElement.templateUrl==null
?未定义
:navElement.templateUrl,
控制器:navElement.controller==null
?未定义
:navElement.controller+“按ctrl键”
}
}
});
此代码针对嵌套json对象中的每个项执行。如果还有什么其他有用的,请告诉我。

有一个问题:有一个答案,说明如何做到这一点

发生了什么事?刷新时,
url
会更快地计算,然后注册状态。我们不得不推迟。解决方案由
UI路由器
本机功能
deferIntercept(defer)

如文件所述:

禁用(或启用)延迟位置更改拦截

如果希望自定义同步URL的行为(例如,如果希望推迟转换但保持当前URL),请在配置时调用此方法。然后,在运行时,在配置了自己的
$locationChangeSuccess
事件处理程序后,调用
$urlRouter.listen()

简而言之,我们将在配置阶段停止URL处理:

app.config(function ($urlRouterProvider) {
 
  // Prevent $urlRouter from automatically intercepting URL changes;
  // this allows you to configure custom behavior in between
  // location changes and route synchronization:
  $urlRouterProvider.deferIntercept();
 
})
一旦我们从JSON配置了所有动态状态,我们将在.run()阶段重新启用它:

.run(function ($rootScope, $urlRouter, UserService) {
 
  ...

    // Once the user has logged in, sync the current URL
    // to the router:
     $urlRouter.sync();
 
    // Configures $urlRouter's listener *after* your custom listener
    $urlRouter.listen();
});

有一条来自链接的

我不知道你所有的路线都是怎样的。。但如果刷新子状态的页面,则需要传递父状态的所有参数才能正确解析。

请注意。我期待有问题的语句“.我正在从json文件中读取导航…”表示您正在从加载的
.json
,通过
$http
加载。如果不是,我的答案也没用……我正在通过$http调用WebApi服务加载json文件,所以您的答案仍然适用。虽然我在配置中添加了
deferIntercept()
,在run方法中添加了
sync()
listen()
,但我仍然遇到了同样的问题。我在现实生活中使用了同样的方法。1:1. 我建议,调查我的失物招领,这应该会有所帮助(加上相关问答中的细节)。或者调整一下我的弹夹,让我看看什么不起作用。。。因为你问题中的片段几乎是我能展示的最大值,我可以建议。。。这有意义吗?唯一的区别似乎是您的URL包含
^
,而我的URL不包含。这可能是罪魁祸首吗?我现在几乎可以解决我的问题了。这是一个由两部分组成的问题,添加了
deferIntercept()
sync()
listen()
解决了问题的一部分。如果我的URL后面有斜杠,我也会看到问题,因此添加
$URLMacherFactoryProvider.strictMode(false)
解决了这个问题。谢谢你再次拯救我@RadimKohler!