Javascript Angular JS-UI路由器页面重新加载赢得';不要设定状态

Javascript Angular JS-UI路由器页面重新加载赢得';不要设定状态,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,这是我的主应用程序(app.js) 这是子模块(submodule.js) 预期的行为将是 当找不到匹配的路由时重定向到“应用程序”url 激活根url上的“根”状态 激活/todo url上的“root.substate”状态 这很好用 但是,如果我刷新页面,状态将不会被激活,我将被发送回“应用程序”。为什么?我们有两个根状态(没有父)状态。它们应该是没有url的,或者应该以某个唯一的符号开始-最好的选择总是带有(URI规范)的/: // domain/app/login - easy t

这是我的主应用程序(app.js)

这是子模块(submodule.js)

预期的行为将是

  • 当找不到匹配的路由时重定向到“应用程序”url
  • 激活根url上的“根”状态
  • 激活/todo url上的“root.substate”状态
这很好用

但是,如果我刷新页面,状态将不会被激活,我将被发送回“应用程序”。为什么?

我们有两个根状态(没有父)状态。它们应该是没有url的,或者应该以某个唯一的符号开始-最好的选择总是带有(URI规范)的
/

// domain/app/login - easy to find
.state('login', {
    url: 'login',
    ...
})
// no def === domain/app
.state('root', {
    url: '',
    ...
});
现在,让我们使用一些
url
,甚至对于我们的
'root'
状态:

// domain/app/
.state('root', {
    url: '/',
    ...
});
那个人,我们的子“root.substate”也将包含父
url
部分。所以如果我们用这个

// this is a child and its url will be in fact: domain/app//todo/sometype
.state('root.substate', {
    url: '/todo/{type}',
    ...
});
这样,我们的url现在将包含//(双斜杠)

为了避免这种情况,我们可以使用UI路由器功能“^”

// this stat will not use the parent part
// this will work domain/app/todo/sometype
.state('root.substate', {
    url: '^/todo/{type}',
    ...
});
检查文档:

如果希望绝对url匹配,则需要在url字符串前面加上特殊符号“^”


我知道还有很多时间。但关于提神的问题。如果要与刷新前保持相同的url地址,应添加下一步:

angular.module('app').run(['$state', '$stateParams', function($state, $stateParams) {
   //this solves page refresh and getting back to state
}]);

就像上次回答中提到的那样,可能不是真正的问题,但我肯定会以
/
-
url:'/todo/{type}'
开始任何url,我仍在测试中,但似乎前导斜杠可能是问题所在。你知道为什么吗?简单地说,必须有某种方法来明确定义状态url的起始位置。您的url映射显示:
domain/applogin
事实上。。。我建议:
domain/app/login
。所以没有斜线。。。引擎的大问题,如果你知道我的意思的话,嗯,我仍然很困惑。登录状态和根状态的前导斜杠修复了它们。嵌套的root.substate状态在没有前导斜杠的情况下可以正常工作,并且前导斜杠有问题。Buggy=刷新导致未解析的路由。Edit:Buggy=url它呈现为foo.bar/#//todo(双斜杠)。我想我遗漏了一些关于url生成的内容。我将尝试向您展示如何回答。。告诉我谢谢你,这是我一直在寻找的答案,如果这对我有帮助的话。享受强大的UI路由器;)我尝试了这个解决方案,效果很好。但是我仍然在刷新指向默认路由的页面时遇到问题($否则)
// this stat will not use the parent part
// this will work domain/app/todo/sometype
.state('root.substate', {
    url: '^/todo/{type}',
    ...
});
$stateProvider
  .state('contacts', {
     url: '/contacts',
     ...
  })
  .state('contacts.list', {
     url: '^/list',
     ...
  });
angular.module('app').run(['$state', '$stateParams', function($state, $stateParams) {
   //this solves page refresh and getting back to state
}]);