从angular $ locationProvider中的url中删除#后发出问题

时间:2017-03-20 17:12:57

标签: javascript angularjs node.js meteor

在我的app.js中我有

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

所以我的路由是localhost:3000 /#/而点击按钮就把我带到localhost:3000 /#/ admin 我想从我的网址中删除#,所以我使用了

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

现在localhost:3000/正在运行,点按按钮就会转到localhost:3000/admin

但是,如果我直接在网址中提供localhost:3000/admin,则表示无法获取/admin ..但如果提供localhost:3000/#/admin,则会将我带到localhost:3000/admin。为什么这种行为如何才能我让localhost:3000/admin工作。可以帮助人

3 个答案:

答案 0 :(得分:1)

  1. 移动此行

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

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

  2. javascripts/app.js

    中添加此行

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

  3. 添加此代码

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

    app.js

  4. 之前的http.createServer(app)

答案 1 :(得分:0)

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

使用'#'它更容易,因为来自'#' URL的末尾不会在请求中发送到服务器,因此服务器不必做任何事情。

但对于没有'#'整个URL被发送到服务器,因此服务器必须知道要提供什么,并且客户端必须能够加载正确的视图,具体取决于第一页加载中使用的URL。

如果没有提供后端代码,很难说清楚具体内容,但你必须确保:

  1. 对于http://localhost:3000/admin这样的每个请求,都会返回与http://localhost:3000/
  2. 相同的HTML
  3. 您只使用HTML for CSS和客户端JavaScript的绝对网址
  4. 您的客户端代码在第一次加载时显示正确的视图
  5. 您的客户端会更改每个网址更改的视图,就像使用'#'
  6. 一样

答案 2 :(得分:0)

请更新您的html,如下所示:

在head部分,请使用'base'标签。 所以head标签看起来像是:

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

然后尝试使用网址'localhost:3000 / admin' 如果这有帮助,请告诉我。