4

我想用 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 进行处理。我们怎么能这么说呢?

4

1 回答 1

-1

看来它确实有效。然而,我自己并没有做这项工作。我依靠这个骨架项目: https ://github.com/thanh-nguyen/angular-express-seed-coffee

这允许您在一定程度上控制哪些路径由客户端处理,哪些由服务器处理。

于 2013-04-15T13:37:32.683 回答