2016-08-23 5 views
0

これは単純なはずですが、わかりません。UIルータの空のパラメータが間違ったルートにナビゲートされる

私は2つのルートがあります。

$stateProvider 

    .state('users', { 
     url: '/users', 
     views: {'@': { 
      templateUrl: 'templates/users.tpl.html', 
      controller: 'UsersCtrl as users' 
     }} 
    }) 
    .state('users.edit', { 
     url: '/{userId}', 
     views: {'@': { 
      templateUrl: 'templates/editUser.tpl.html', 
      controller: 'EditUserCtrl as editUser' 
     }} 
    }); 

名前で、「ユーザー」の状態に移動するには、UI-SREFまたは$ state.goを使用する場合、これは正常に動作しますが、あなたはdomain.com/入力した場合をusers /をURLバーに入力すると、空白のuserIdパラメータを持つ編集状態になりますが、末尾のスラッシュの後には何もありません。

通常これは問題にはならないが、userIdを指定しないでeditUserルートを実行するとコンソールエラーが発生し、これを修正するのは苦労する。

これは簡単に修正できますか?

+0

'/' /ユーザーに最初 'url'のいずれかを変更してみてください(最後のスラッシュを追加)や' /ユーザ/ {にuserId} '第2' url'を変更します。私は、これらのうちの1つが、URLパスの '/ users /'部分に基づいて他のものを混乱させていると思われます。 –

+0

最初のユーザーはスラッシュなしで作業を停止し、2番目のルートに行くときは二重スラッシュを、2番目のルートに行くときは2番目のユーザーはurl/users/usersを作成します。 URLが "/ users"または "/ users /"の場合は親ルートに移動する必要がありますが、 "/ users/something"の場合は編集ページに移動する必要があります。 – jonhobbs

答えて

0

あなたの状態の定義は

$ stateProvider

する必要があります
.state('users', { 
    url: '/users', 
    views: {'@': { 
     templateUrl: 'templates/users.tpl.html', 
     controller: 'UsersCtrl as users' 
    }} 
}) 
.state('users.edit', { 
    url: '/edit/{userId}', 
    views: {'@': { 
     templateUrl: 'templates/editUser.tpl.html', 
     controller: 'EditUserCtrl as editUser' 
    }} 
}); 

あなたの子供の状態のURLは '/ edit/{userId}'にする必要があります。子状態を作成すると、そのURLは親状態URLを自動的に追加します。したがって、あなたのURLが '/ {userId}'の場合、 'domain.com/users/{userId}'になります。そのため、domain.com/users/がヌルパラメータ値を持つ状態users.editに移動するのはこのためです。

https://github.com/angular-ui/ui-router/wiki/nested-states-%26-nested-views

+0

私は思っていますが、私はそれらをきれいに保つためにURLの "/編集"を避けようとしていました。/users/michaeljackson – jonhobbs

関連する問題