我很难理解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,但向你展示源代码并不重要。
现在我打开浏览器并输入:localhost:3000 / game。
正如预期的那样,我被重定向到localhost:3000 /游戏/房间,它向我显示了预期的视图。
但是当我输入:localhost:3000 / game / room或localhost:3000 / game / foo 它告诉我“不能GET / game / xxx”
我想被重定向到/ game然后到/ game / room。怎么可能?
答案 0 :(得分:1)
当您看到预期视图时,是否会被重定向到http://localhost:3000/#/game/room
?请注意#
。
当您输入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');
});
这会将事物从快递重定向到Angular可以处理它们的地方。