我想用 HTML5 样式的 URL 制作一个 AngularJS 应用程序(即 URL 中没有#
片段)。因此,在我的 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
- 路由由 Angular 的路由器在
/1/foo
客户端处理
说我们的server.coffee
外观,作为标准,如下所示(我们提供dist
包含我们编译的、缩小的 Angular 源代码的静态目录:
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/foo
将变为http://localhost:3005/1/foo
(不再有 hash #
)。这一次,整个 URL 都被 Express 截取了,而且因为我们没有定义除/
.
我们真正想说的是 URL ( /1/foo
) 的后半部分应该“委托”给 Angular 进行处理。我们怎么能这么说呢?