Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs UI路由器:错误地将url路径解释为$urlRouterProvider中的参数_Angularjs_Angular Ui Router - Fatal编程技术网

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不起作用