Angular.js -重定向不起作用

Angular.js - Redirection not working

本文关键字:不起作用 重定向 js Angular      更新时间:2023-09-26

我很难理解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。但是给你看源代码并不重要。

现在我打开浏览器,输入:localhost:3000/game。

如预期的那样,我被重定向到localhost:3000/game/room,它向我显示了预期的视图。

但是当我输入:localhost:3000/game/room或localhost:3000/game/foo显示"cannot GET/game/xxx"

我想被重定向到/game,然后到/game/room。这怎么可能?

当您看到预期的视图时,您是否被重定向到http://localhost:3000/#/game/room ?注意#

当你输入http://localhost:3000/game/room时,它会击中express服务器,而不是你的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');
});

这会把东西从express重定向到Angular可以处理的地方。