Angularjs UI路由器:错误地将url路径解释为$urlRouterProvider中的参数
我的Angularjs UI路由器:错误地将url路径解释为$urlRouterProvider中的参数,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我的$stateProvider中有以下设置: $stateProvider .state('main.newworkspace', { url: "/workspace/new", templateUrl: "views/main/newworkspace.html", controller: "NewWorkspaceCtrl" }) .state('main.workspace', { url: "/w
$stateProvider
中有以下设置:
$stateProvider
.state('main.newworkspace', {
url: "/workspace/new",
templateUrl: "views/main/newworkspace.html",
controller: "NewWorkspaceCtrl"
})
.state('main.workspace', {
url: "/workspace/:id",
templateUrl: "views/main/workspace/main.html",
controller: "WorkspaceCtrl",
abstract: true
})
.state('main.workspace.dashboard', {
url: "/dashboard",
templateUrl: "views/main/workspace/dashboard.html",
controller: "DashboardCtrl"
})
.state('main.workspace.info', {
url: "/info",
templateUrl: "views/main/workspace/info.html",
controller: "InfoCtrl"
})
$urlRouterProvider.when('/workspace/:id', '/workspace/:id/dashboard');
现在已为此应用启用以下路由:
/workspace/new
/workspace/:id
/workspace/:id/dashboard
/workspace/:id/info
因为/workspace/:id
是抽象的,所以我希望它自动重定向到/workspace/:id/dashboard
。我试图通过在$UrlRouterProvider
中添加when()
来实现这一点:
$stateProvider
.state('main.newworkspace', {
url: "/workspace/new",
templateUrl: "views/main/newworkspace.html",
controller: "NewWorkspaceCtrl"
})
.state('main.workspace', {
url: "/workspace/:id",
templateUrl: "views/main/workspace/main.html",
controller: "WorkspaceCtrl",
abstract: true
})
.state('main.workspace.dashboard', {
url: "/dashboard",
templateUrl: "views/main/workspace/dashboard.html",
controller: "DashboardCtrl"
})
.state('main.workspace.info', {
url: "/info",
templateUrl: "views/main/workspace/info.html",
controller: "InfoCtrl"
})
$urlRouterProvider.when('/workspace/:id', '/workspace/:id/dashboard');
所以现在它正确地重定向了
/workspace/:id ------> /workspace/:id/dashboard
但也重定向/workspace/new
/workspace/new ------> /workspace/new/dashboard
有没有快速解决这个问题的方法?我还尝试在
$urlRouterProvider中确定$stateParam.id=='new'
。当(…)
函数调用时,但$stateParam和$state.params始终为空。我们应该能够以类似的方式赋予特殊路由优先级:
// when for the NEW state... will be matching first - and used
$urlRouterProvider.when('/workspace/new'
, function($state){$state.go('main.newworkspace');})
// other 'when' as needed...
$urlRouterProvider.when('/workspace/:id', '/workspace/:id/dashboard');
第一次重播
。when()
将赢得…谢谢!为我工作。使用$urlRouteProvider.when('/foo/bar',函数($state){$state.go('foo.bar');})显式定义更高优先级的路由;是否可以从$urlRouterProvider获取$stateParams?因为对我来说,它们总是空的,并且执行$stateParams.id不起作用