5

angularとnodejsを使用してビルドとWebを試みています。ログインと登録フォームを含む/homeパスにAngular をロードしています。/これが私の角度構成です:

window.app.config(['$routeProvider', '$locationProvider',
    function($routeProvider,$locationProvider) {
        $locationProvider.html5Mode(true);
        $locationProvider.hashPrefix('!');
        $routeProvider.
        when('/profile', {
            templateUrl: '/views/account.html',

        }).
        when('/edit', {
            templateUrl: '/views/edit.html',

        }).
        when('/home', {
            templateUrl: 'views/index.html'
        }).
        when('/signout', {
            templateUrl: 'views/signout.html'
            //on this view i load a controller which submits a form to /signout
        }).

        otherwise({
            redirectTo: '/home'
        });
    }
]);

サーバー側のルーティング:

    app.get('/',function(){
          res.render('index',{
             user: req.user? req.user:'guest'
        });
    });
    app.post('/login',function(){
             //if success redirect to /home
             //if fails redirect to /
    });
    app.get('/auth/facebook', passport.authenticate('facebook', { scope: [ 'email',                  'user_about_me', 'read_stream', 'publish_actions'], failureRedirect: '/' }));
  app.get('/auth/facebook/callback', passport.authenticate('facebook', { failureRedirect: '/' }), users.authCallback);
    app.get('/signout',function(){
             //signing out the user here...and redirects to /
    });
    app.get('/home',function(req,res){
        res.render('users/home',{
          user: req.user? req.user:'guest',
          message: req.flash('error')

        })
      }); 
    app.get('/profile',function(req,res){
        res.render('users/home',{
          user: req.user? req.user: 'guest',
          message: req.flash('error')

        })
      });
      app.get('/edit',function(req,res){
        res.render('users/home',{
          user: req.user? req.user:'guest',
          message: req.flash('error')

        })
      });

に送信されるFacebook認証をクリックすると、Angularルーティングのため/homeにURLのリンクをクリックしてリクエストを送信するにはどうすればよいですか。サーバーにリクエストを送信することをAngularが防止しています。それは urlに行くだけです。結果は同じで、そこにビューがロードされていません。/auth/facebook/home/home/home/

4

2 に答える 2

3

すべてのリンク要素を変更するのではなく、1 か所でルート構成を変更したい場合は、次のようにすることができます。

$routeProvider.when('/externalpath', { resolve: {
    redirect: ['$location', function($location) {
        window.location.replace($location.absUrl());
    }]
}});

これは基本的に、そのルートへのリンクがヒットするたびにインライン関数を呼び出し、関数はブラウザーをターゲットの場所 (角度の外側) にリダイレクトするだけです。「resolve」構成は、ルートに対してテンプレートまたはコントローラーが構成されているかどうかに関係なく処理され、「redirect」名は基本的に単なるダミー名です。重要なことは、関数が実行されてその値を取得することです (これは使用されません)。この場合)。

これは、サーバーに到達する必要がある /signout URL がある場合などにも役立ちます。構成されていないすべてのパスをサーバーで処理する場合は、when() の代わりに otherwise() 構成を使用することもできます。

于 2014-08-19T16:10:43.600 に答える