0

私は ngRouter を使用していますが、以下のコードに問題があります。

# Add Video
.when '/videos/:action',
  templateUrl: 'app/videos/videos-edit/videos-form.html'
  controller: 'VideosEditCtrl'
  authenticate: true

# Edit video
.when '/videos/:action/:year/:month/:slug',
  templateUrl: 'app/videos/videos-edit/videos-form.html'
  controller: 'VideosEditCtrl'
  authenticate: true

上記のビデオの編集ページにアクセスしたときにログインしていない場合、必要に応じてログイン ページにリダイレクトされます。ただし、ビデオの追加ページで同じことを行うと、ブラウザーの URL はログイン ページに変わりますが、ビデオの追加のビューは引き続き表示されます。

add video コントローラーから authenticate:true を削除できます。これは、編集ビデオ認証を使用しても機能するようですが、理由や方法がわかりません。

コードが非常に似ているため、ビデオの追加と編集に 1 つのコントローラーを使用したいと考えています。ルーティングに何か問題がありますか? コントローラーを分割する必要がありますか?

4

1 に答える 1

0

app.js に「preventDefault()」を追加します。

すなわち

//before
.run(function ($rootScope, $location, Auth) {
// Redirect to login if route requires auth and you're not logged in
$rootScope.$on('$stateChangeStart', function (event, next) {
  Auth.isLoggedInAsync(function(loggedIn) {
    if (next.authenticate && !loggedIn) {
      $location.path('/login');
    }
  });
});

//after
.run(function ($rootScope, $location, $state, Auth) {
// Redirect to login if route requires auth and you're not logged in
$rootScope.$on('$stateChangeStart', function (event, next) {
  Auth.isLoggedInAsync(function(loggedIn) {
    if (next.authenticate && !loggedIn) {
        event.preventDefault();
        $location.path('/login');
    }
  });
});
于 2014-12-30T14:29:03.820 に答える