Javascript 角度ui路由器嵌套视图页面没有';t使用直接url或刷新时加载

Javascript 角度ui路由器嵌套视图页面没有';t使用直接url或刷新时加载,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我有一个很好的例子,但是有一个错误,当通过可点击的链接导航到嵌套状态时,我得到了想要的行为,但是当刷新页面或写入URL并按enter键进入页面时,页面在某些状态下不会加载。 我有4个州: 简介 profile.feed profile.user.about profile.user.feed 对于前两个刷新页面或选择URL并按enter键将加载纵断面图,但不会加载about视图,第二个2可以正常工作。 路由器配置如下: $urlRouterProvider.otherwise("/home"

我有一个很好的例子,但是有一个错误,当通过可点击的链接导航到嵌套状态时,我得到了想要的行为,但是当刷新页面或写入URL并按enter键进入页面时,页面在某些状态下不会加载。 我有4个州:

  • 简介
  • profile.feed
  • profile.user.about
  • profile.user.feed
对于前两个刷新页面或选择URL并按enter键将加载纵断面图,但不会加载about视图,第二个2可以正常工作。 路由器配置如下:

$urlRouterProvider.otherwise("/home");
// route 1
$stateProvider.state('home' , {
  url: "/home",
  templateUrl: "home.html"
});
// route 2
$stateProvider.state('profile' , {
  controllerAs: "Profile",
  url:          "/profile",
  templateUrl:  "profile.html",
  controller:   "ProfileController"
});
// user route
$stateProvider.state('profile.user' , {
  controllerAs: "Profile",
  url:          "^/:username",
  controller:   "ProfileController",
  template:     "<div ui-view></div>",
  resolve: {
    username: ['$stateParams', function ($stateParams) {
      return $stateParams.username;
    }]
  }
});
// route 3
$stateProvider.state('settings' , {
  url: "/settings",
  templateUrl: "settings.html"
});
// user about route
$stateProvider.state('profile.about', {
  controllerAs: "About",
  url:          "^/about",
  templateUrl:  "about.html",
  controller:   "AboutController2"
});
// user about route
$stateProvider.state('profile.user.about', {
  controllerAs: "About",
  url:          "/about",
  templateUrl:  "about.html",
  controller:   "AboutController"
});
// user about route
$stateProvider.state('profile.user.feed', {
  controllerAs: "Feed",
  url:          "/feed",
  templateUrl:  "feed.html",
  controller:   "AboutController"
});
$stateProvider.state('profile.feed', {
  controllerAs: "Feed",
  url:          "^/feed",
  templateUrl:  "feed.html",
  controller:   "AboutController2"
});
$urlRouterProvider.otherwise("/home");
// route 1
$stateProvider.state('home' , {
  url: "/home",
  templateUrl: "home.html"
});
// route 2
$stateProvider.state('profile' , {
  controllerAs: "Profile",
  url:          "/profile",
  templateUrl:  "profile.html",
  controller:   "ProfileController"
});
// route 3
$stateProvider.state('settings' , {
  url: "/settings",
  templateUrl: "settings.html"
});
// user about route
$stateProvider.state('profile.about', {
  controllerAs: "About",
  url:          "^/about",
  templateUrl:  "about.html",
  controller:   "AboutController2"
});
$stateProvider.state('profile.feed', {
  controllerAs: "Feed",
  url:          "^/feed",
  templateUrl:  "feed.html",
  controller:   "AboutController2"
});
// user route
$stateProvider.state('profile.user' , {
  controllerAs: "Profile",
  url:          "^/:username",
  controller:   "ProfileController",
  template:     "<div ui-view></div>",
  resolve: {
    username: ['$stateParams', function ($stateParams) {
      return $stateParams.username;
    }]
  }
});
// user about route
$stateProvider.state('profile.user.about', {
  controllerAs: "About",
  url:          "/about",
  templateUrl:  "about.html",
  controller:   "AboutController"
});
// user about route
$stateProvider.state('profile.user.feed', {
  controllerAs: "Feed",
  url:          "/feed",
  templateUrl:  "feed.html",
  controller:   "AboutController"
});
$urlRouterProvider。否则(“/home”);
//一号干线
$stateProvider.state('home'{
网址:“/home”,
templateUrl:“home.html”
});
//二号干线
$stateProvider.state('profile'{
controllerAs:“个人资料”,
url:“/profile”,
templateUrl:“profile.html”,
控制器:“ProfileController”
});
//用户路由
$stateProvider.state('profile.user'{
controllerAs:“个人资料”,
url:“^/:用户名”,
控制器:“ProfileController”,
模板:“”,
决心:{
用户名:['$stateparms',函数($stateparms){
返回$stateParams.username;
}]
}
});
//三号干线
$stateProvider.state('settings'{
url:“/settings”,
templateUrl:“settings.html”
});
//用户关于路线
$stateProvider.state('profile.about'{
controllerAs:“关于”,
网址:“^/about”,
templateUrl:“about.html”,
控制器:“关于控制器2”
});
//用户关于路线
$stateProvider.state('profile.user.about'{
controllerAs:“关于”,
url:“/关于”,
templateUrl:“about.html”,
控制器:“关于控制器”
});
//用户关于路线
$stateProvider.state('profile.user.feed'{
controllerAs:“提要”,
url:“/feed”,
templateUrl:“feed.html”,
控制器:“关于控制器”
});
$stateProvider.state('profile.feed'{
controllerAs:“提要”,
url:“^/feed”,
templateUrl:“feed.html”,
控制器:“关于控制器2”
});
我不在HTML5模式中,正如在中看到的那样,我在那里播下了这个,但没有答案。

有关如何解决此问题的任何帮助,请提前感谢。

我在发布问题几秒钟后发现的问题是路线定义的顺序不正确。
state profile.user具有动态url参数,因此在profile.user之后定义profile.feed或profile.about将导致此错误,因此定义profile.about和profile.feed应在profile.user之前,如下所示:

$urlRouterProvider.otherwise("/home");
// route 1
$stateProvider.state('home' , {
  url: "/home",
  templateUrl: "home.html"
});
// route 2
$stateProvider.state('profile' , {
  controllerAs: "Profile",
  url:          "/profile",
  templateUrl:  "profile.html",
  controller:   "ProfileController"
});
// user route
$stateProvider.state('profile.user' , {
  controllerAs: "Profile",
  url:          "^/:username",
  controller:   "ProfileController",
  template:     "<div ui-view></div>",
  resolve: {
    username: ['$stateParams', function ($stateParams) {
      return $stateParams.username;
    }]
  }
});
// route 3
$stateProvider.state('settings' , {
  url: "/settings",
  templateUrl: "settings.html"
});
// user about route
$stateProvider.state('profile.about', {
  controllerAs: "About",
  url:          "^/about",
  templateUrl:  "about.html",
  controller:   "AboutController2"
});
// user about route
$stateProvider.state('profile.user.about', {
  controllerAs: "About",
  url:          "/about",
  templateUrl:  "about.html",
  controller:   "AboutController"
});
// user about route
$stateProvider.state('profile.user.feed', {
  controllerAs: "Feed",
  url:          "/feed",
  templateUrl:  "feed.html",
  controller:   "AboutController"
});
$stateProvider.state('profile.feed', {
  controllerAs: "Feed",
  url:          "^/feed",
  templateUrl:  "feed.html",
  controller:   "AboutController2"
});
$urlRouterProvider.otherwise("/home");
// route 1
$stateProvider.state('home' , {
  url: "/home",
  templateUrl: "home.html"
});
// route 2
$stateProvider.state('profile' , {
  controllerAs: "Profile",
  url:          "/profile",
  templateUrl:  "profile.html",
  controller:   "ProfileController"
});
// route 3
$stateProvider.state('settings' , {
  url: "/settings",
  templateUrl: "settings.html"
});
// user about route
$stateProvider.state('profile.about', {
  controllerAs: "About",
  url:          "^/about",
  templateUrl:  "about.html",
  controller:   "AboutController2"
});
$stateProvider.state('profile.feed', {
  controllerAs: "Feed",
  url:          "^/feed",
  templateUrl:  "feed.html",
  controller:   "AboutController2"
});
// user route
$stateProvider.state('profile.user' , {
  controllerAs: "Profile",
  url:          "^/:username",
  controller:   "ProfileController",
  template:     "<div ui-view></div>",
  resolve: {
    username: ['$stateParams', function ($stateParams) {
      return $stateParams.username;
    }]
  }
});
// user about route
$stateProvider.state('profile.user.about', {
  controllerAs: "About",
  url:          "/about",
  templateUrl:  "about.html",
  controller:   "AboutController"
});
// user about route
$stateProvider.state('profile.user.feed', {
  controllerAs: "Feed",
  url:          "/feed",
  templateUrl:  "feed.html",
  controller:   "AboutController"
});
$urlRouterProvider。否则(“/home”);
//一号干线
$stateProvider.state('home'{
网址:“/home”,
templateUrl:“home.html”
});
//二号干线
$stateProvider.state('profile'{
controllerAs:“个人资料”,
url:“/profile”,
templateUrl:“profile.html”,
控制器:“ProfileController”
});
//三号干线
$stateProvider.state('settings'{
url:“/settings”,
templateUrl:“settings.html”
});
//用户关于路线
$stateProvider.state('profile.about'{
controllerAs:“关于”,
网址:“^/about”,
templateUrl:“about.html”,
控制器:“关于控制器2”
});
$stateProvider.state('profile.feed'{
controllerAs:“提要”,
url:“^/feed”,
templateUrl:“feed.html”,
控制器:“关于控制器2”
});
//用户路由
$stateProvider.state('profile.user'{
controllerAs:“个人资料”,
url:“^/:用户名”,
控制器:“ProfileController”,
模板:“”,
决心:{
用户名:['$stateparms',函数($stateparms){
返回$stateParams.username;
}]
}
});
//用户关于路线
$stateProvider.state('profile.user.about'{
controllerAs:“关于”,
url:“/关于”,
templateUrl:“about.html”,
控制器:“关于控制器”
});
//用户关于路线
$stateProvider.state('profile.user.feed'{
controllerAs:“提要”,
url:“/feed”,
templateUrl:“feed.html”,
控制器:“关于控制器”
});
希望这能帮助其他人不要在这样一个简单的错误上浪费时间。

Nice spot;)是的,这就是这里路线的本质。状态url在声明时已解析。。。第一个赢了。所以声明应该遵循顺序规则。。。