AngularJs UI-Router - 页面刷新$ state.current现在为空

gwi*_*003 3 angularjs angular-ui-router

我有一个Angular应用程序使用ui-router,每当我刷新页面时我都会遇到问题.我正在使用嵌套视图,命名视图来构建应用程序.每当我刷新页面时,ui-router都不会重新加载当前状态,只是将页面留空.

页面加载$state.current等于

Object {name: "", url: "^", views: null, abstract: true}
Run Code Online (Sandbox Code Playgroud)

我正在从.json文件中读取导航$http并循环遍历各个州.所以这就是我能展示的:

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'
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

为嵌套的json对象中的每个项执行此代码.如果还有其他任何有用的信息,请告诉我.

Rad*_*ler 5

有一个问题:AngularJS - UI-router - 如何使用一个答案配置动态视图,其中显示了如何执行此操作.

怎么了?在刷新时,url会更快地评估,然后注册状态.我们不得不推迟.解决方案由UI-Router本机功能驱动deferIntercept(defer)

$ urlRouterProvider.deferIntercept(延迟)

正如文件中所述:

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

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

简而言之,我们将在配置阶段停止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();

})
Run Code Online (Sandbox Code Playgroud)

一旦我们从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();
});
Run Code Online (Sandbox Code Playgroud)

链接的问答中有一个吸烟者