4

#HTML5 スタイルの URL (つまり、URL にフラグメントがない) を使用して AngularJS アプリを作成したいと考えています。したがって、Angular アプリのルーティング コントローラー モジュールには、次のようなものがあります。

angular.module('app').config(['$routeProvider','$locationProvider',function($routeProvider,$locationProvider) {
    $locationProvider.html5Mode(true)
...
}

$routeProvider
.when('/1/:param', /* do something */)
.when('/2/:param', /* do something else */)
.when('/3/:param', /* do something else again*/);

AngularFunなどの多くの実用的な例では、HTML5 モードを使用していません。のようなリクエストの場合http://localhost:3005/#/1/foo

  • この部分はExpress によってhttp://localhost:3005/サーバー側で処理されます。/Express は、Angular 対応のサービスを喜んで提供しますindex.html
  • ルートは/1/fooAngularのルーターによってクライアント側で処理されます

server.coffee標準として、以下のような外観を考えてみましょう (コンパイルされ、縮小された Angular ソースを含む静的ディレクトリを提供しますdist

express = require 'express'
routes = require './routes'
dir = "#{__dirname}/dist"            # sources live here
port = process.env.PORT ? process.argv.splice(2)[0] ? 3005
app = express()

app.configure -> 
    app.use express.logger 'dev'
    app.use express.bodyParser()
    app.use express.methodOverride()
    app.use express.errorHandler()
    app.use express.static dir       # serve the dist directory
    app.use app.router
    routes app, dir                  # extra custom routes

HTML5 モードを使用すると、URLhttp://localhost:3005/#/1/foohttp://localhost:3005/1/foo(no more hash #) になります。今回は URL 全体が Express に傍受され、 以外のルートを定義していないため混乱します/

私たちが本当に言いたいのは、URL の後半部分 ( /1/foo) は、処理のために Angular に「委譲」する必要があるということです。どうすればこれを言えますか?

4

1 に答える 1