Javascript 更改状态时不更新URL
对于下面的代码,当我从“/login”页面转到“/quick”页面时,状态会随着内容而改变,但URL不会改变。我还注意到,当我从“/login”页面转到“/newsfeed”页面时,URL和状态都在变化。为什么会发生这种情况,我需要URL随状态变化Javascript 更改状态时不更新URL,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,对于下面的代码,当我从“/login”页面转到“/quick”页面时,状态会随着内容而改变,但URL不会改变。我还注意到,当我从“/login”页面转到“/newsfeed”页面时,URL和状态都在变化。为什么会发生这种情况,我需要URL随状态变化 X.config(['$httpProvider', '$stateProvider', '$urlRouterProvider', '$locationProvider', function($httpProvider, $
X.config(['$httpProvider', '$stateProvider', '$urlRouterProvider', '$locationProvider',
function($httpProvider, $stateProvider, $urlRouterProvider, $locationProvider) {
$urlRouterProvider.otherwise('/login');
$stateProvider
.state('app', {
template: '<div ui-view=""></diiv>'
})
.state('app.login', {
templateUrl: '../views/login/login.html',
controller:'LoginController'
})
.state('app.login.main', {
url: '/login',
templateUrl: '../views/login/login-main.html',
controller: 'LoginController'
})
.state('app.login.quiz_list', {
templateUrl: '../views/quiz/quiz_list.html',
controller: 'QuizListController',
url: '/quiz'
})
.state('app.front', {
templateUrl: '../views/user_utility/app.html',
controller: 'HeaderController'
})
.state('app.front.newsfeed', {
url: '/newsfeed',
templateUrl: '../views/user_utility/newsfeed.html',
controller: 'UserFeedController'
});
$httpProvider.interceptors.push('AuthInterceptor');
$httpProvider.defaults.useXDomain = true;
}
])
X.config(['$httpProvider','$stateProvider','$urlRouterProvider','$locationProvider',
函数($httpProvider、$stateProvider、$urlRouterProvider、$locationProvider){
$urlRouterProvider。否则('/login');
$stateProvider
.state('应用程序'{
模板:“”
})
.state('app.login'{
templateUrl:“../views/login/login.html”,
控制器:'LoginController'
})
.state('app.login.main'{
url:“/login”,
templateUrl:“../views/login/login main.html”,
控制器:“登录控制器”
})
.state('app.login.quick_list'{
templateUrl:“../views/quick/quick_list.html”,
控制器:“QuizListController”,
url:“/quick”
})
.state('app.front'{
templateUrl:“../views/user_utility/app.html”,
控制器:“HeaderController”
})
.state('app.front.newsfeed'{
url:“/newsfeed”,
templateUrl:“../views/user_utility/newsfeed.html”,
控制器:“UserFeedController”
});
$httpProvider.interceptors.push('AuthInterceptor');
$httpProvider.defaults.useXDomain=true;
}
])
发生这种情况是因为logn.main和login.quick\u列表的父状态都具有相同的父状态。这就是UI Routter在Angular.js中的工作方式
如果您有两个状态-S1和S2,S2是S1的子状态,当您转到S2时,URL将是S1/S2
您的“app”和“app.login”状态未指定任何URL,“app.login.main”状态的URL指定为“/login”,因此当您在该页面中时,URL应为“domain/#/login”。“app.login.quick_list”中测验页面的状态,其URL为“quick”。由于您的登录主页和测验页面具有相同的父状态(app.login是主列表和测验列表的父级),因此当您移动到此状态时,URL不会完全更改,只有“测验”将附加到URL。因此,测验页面中的URL应该是“域/#/login/quick”
但是,您的newsfeed页面有一个不同的父级-“app.front.newfeed”,其URL为“/newsfeed”。现在可以看到,app或front state都有任何URL,所以当您处于这种状态时,您的URL应该是“domain/#/newsfeed”
为了防止出现这种情况,我建议将测验列表移动到另一个级别。您的状态层次结构应该如下所示:
- 应用程序
- 登录
- 主要
- 正面
- 新闻提要
- 测验清单
- 登录
app.state('app', ...)
app.state('app.login', ...)
app.state('app.login.main', ...) //URL - /login
app.state('app.front', ...)
app.state('app.front.quiz_list', ...) //URL - /newsfeed
app.state('app.front.newsfeed', ...) //URL - /quiz
您能显示用于更改状态的标记吗?或者是拉小提琴?