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!