“外部”导航以纠正angular.js url(直接链接/刷新/等)

时间:2013-05-14 17:59:39

标签: angularjs

我正在开发一个角度应用程序,并有快速的问题。作为“单页应用”,角度'接管'URL映射,因此我可以从“/” - >导航'/ about'等,导航都在一个页面上发生在客户端上。

我想弄清楚的是当绕过客户端导航时如何到达客户端上的正确页面。例如,不是转到http://www.myapp.com,而是点击“关于”并转到“http://www.myapp.com/about”,如何处理用户直接转到“http://www.myapp.com/about”,我显然可以将它们重定向到“/”,但我仍然希望它们“结束”在'/ about',因为这是他们所期望的。同样,刷新时也存在同样的问题。如果我坐在'/ about',并进行浏览器刷新,该请求将在服务器上转为'/ about'并绕过应用程序,所以再次需要我猜测,在根目录重新加载应用程序,但仍然让它回到/关于。

先谢谢。

编辑: 感谢有回复,我想也许我没有清楚地问过这个问题。我理解我的角度应用程序中的路由等。因此,当点击'/ about'href时,将其设置为加载'partials / about.html'。我的问题是,假设已经有效,用户可以直接访问'www.myapp.com/about'。角度应用程序“生活”在根上。所以假设服务器会重定向到'/'。这会加载应用程序但不会“设置”角度到用户期望的路线。所以问题是,有人告诉应用程序“当你加载,转到/关于”可能基于推荐人或其他东西。

2 个答案:

答案 0 :(得分:1)

您使用的服务器是什么?

您可以在路由器中创建一个包罗万象的路线。 像match '*' => 'Angular#App'(Rails)

或(明确)

app.use(function (req, res) {
  res.writeHeader(200, {'Content-Type': 'text/html'});
  res.end(indexFileContent);
});

答案 1 :(得分:0)

我认为你在谈论Angular中的客户端路由 - 而不是服务器端。无论如何,我的答案是假设这一点。

Angular包含一个路由服务,允许您定义映射到基本服务器URL之后的URL的客户端路由。以下是如何进行设置的示例:

angular.module('myApp',[])
.config(['$routeProvider', function($routeProvider) {
    $routeProvider
        .when('/', {templateUrl: '/home-partial', controller: 'HomeCtrl'})
        .when('/about', {templateUrl: '/about-partial', controller: 'AboutCtrl'})
        .when('/contact', {templateUrl: '/contact-partial', controller: 'ContactCtrl'})
        .otherwise({redirectTo: '/'});
  }])

如果您在服务器端设置了局部设备,并且控制器也设置好了,当用户导航到每个网址时,将提取正确的控制器和部分控制器,您可以选择在每个控制器中执行任何操作。

您还可以使用其他选项,我只是以这种方式使用路线。查看AngularJS documentation了解更多信息