2013-04-21 94 views
2

我有薩姆的困難,瞭解Angular.js路由Angular.js - 重定向不工作

這裏的行爲是我的代碼

我app.js:

'use strict'; 

var app = angular.module('myApp', []). 
    config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) { 
    $routeProvider.when('/game/room', {templateUrl: 'roomGame', controller: roomCtrl}); 
    $routeProvider.otherwise({redirectTo: '/game/room'}); 
    $locationProvider.html5Mode(true); 
    }]); 

index.js在那裏我定義的路由服務器端:

app.get('/game', function (req, res) 
{ 
    console.log("we are in /game"); 
    res.render("game/index", { 
     user: req.session 
    }); 
}); 
app.get('/game/roomGame', function (req, res) 
{ 
    console.log("we are in /game/roomGame"); 
    res.render("game/roomGame"; 
}); 

index.jade:

div(ng-controller="indexCtrl") 
    a(href='/') Quitter 

    div(ng-view) 

還有另一個文件:roomGame.jade,但向您展示源代碼並不重要。

現在我打開瀏覽器,輸入:本地主機:3000 /遊戲。

正如預期的那樣,我重定向到本地主機:3000 /遊戲/房間,這表明我預期的看法。

但是,當我進入:本地主機:3000 /遊戲/室或本地主機:3000 /遊戲/富 它爲我「不能GET /遊戲/ XXX」

我希望被重定向到/遊戲,然後到/遊戲/房間。怎麼可能?

回答

1

當你看到預期的看法,你被重定向到http://localhost:3000/#/game/room?請注意0​​。

當您輸入http://localhost:3000/game/room時,它會觸發快速服務器,而不是您的Angular應用,嘗試匹配/game/room,因此會看到您所看到的消息。

一個想法就是去這樣您的服務器上:

app.get('/game/:what', function (req, res) { 
    res.redirect('/#/game/' + req.params.what); 
}); 

或更可能:

app.get('/game/*', function (req, res) { 
    res.redirect('/#/game'); 
}); 

這將從表達的東西重定向到角可以對付他們的地方。

+0

不,我請參見http://本地主機:3000 /遊戲/間(不包括#),但如果我刪除 「$ locationProvider.html5Mode(真);」來自app.js,並對app.js進行一些更改。我看到「http:// localhost:3000/Jeu1#/ room」。 – hamou92 2013-04-21 21:47:20