从angular度$ locationProvider中的URL中删除#后的问题

在我的app.js我有

$routeProvider .when('/', { templateUrl: '/views/main.html' }) .when('/admin', { templateUrl: 'views/admin.html', controller: 'admin', }) 

所以我的路线是本地主机:3000 /#/和点击button,它把我到本地​​主机:3000 /#/pipe理我想从我的url删除#所以我用

 $locationProvider.html5Mode({ enabled: true, requireBase: false }); 

现在localhost:3000/正在工作,点击button,它把我带到localhost:3000/admin

但是,如果我直接给localhost:3000/admin在url中,它是给不能得到localhost:3000/#/admin 。但是,如果给localhost:3000/#/admin ,这是带我到localhost:3000/admin为什么这种行为,我怎么能使localhost:3000/admin可以帮助某人

  1. 移动这一行

    app.use(express.static(path.join(__dirname, 'public')));

    app.use(app.router);之前app.use(app.router); 在app.js文件中

  2. javascripts/app.js添加这一行

    $locationProvider.html5Mode({ enabled: true, requireBase: false });

  3. 添加此代码

    app.get('*', function(req, res) { res.render('index', { title: 'Express' }); });

    http.createServer(app)行之前的app.js

您需要使所有这些路由返回相同的HTML和其他资源,以便对给定URL的第一个请求返回正确的HTML。

使用'#'会更容易,因为从'#'到URL末尾的所有内容都不会在请求中发送到服务器,所以服务器不必做任何事情。

但是,对于没有“#”的URL,整个URL被发送到服务器,所以服务器必须知道要提供什么服务,客户端必须能够加载正确的视图,这取决于首页加载中使用哪个URL。

在没有提供后端代码的情况下,很难说明任何具体内容,但是您必须确保:

  1. 对于http://localhost:3000/admin之类的每个请求,返回的http://localhost:3000/
  2. 您只能在CSS中使用绝对URL和客户端JavaScript
  3. 您的客户端代码在第一次加载时显示正确的视图
  4. 您的客户端将更改每个URL更改的视图,就像使用“#”所做的一样

请更新您的HTML如下:

在头部,请使用“底部”标签。 所以头标将看起来像一些东西:

 <html> <head> <base href="/"> </head> </html> 

然后尝试使用URL“localhost:3000 / admin”让我知道这是否有帮助。