"External"导航以更正角度.js URL(直接链接/刷新/等)



我正在开发一个angular应用程序,并有快速的问题。作为一个"单页应用",angular接管了URL映射,所以我可以从"/"->"/about"等等进行导航,所有的导航都发生在客户端上的一个页面中。

我想弄清楚的是如何在客户端导航被绕过时到达客户端上的正确页面。因此,例如,而不是去http://www.myapp.com,然后点击'about'和'http://www.myapp.com/about',我如何处理用户直接进入'http://www.myapp.com/about',我可以明显地重定向他们到'/',但我仍然希望他们'结束'在'/about',因为这是他们所期望的。同样,刷新也有同样的问题。如果我坐在'/about',做一个浏览器刷新,那个请求会去'/about'在服务器上绕过应用程序,所以再次,我猜,需要重新加载应用程序在根,但仍然使它回到/about。

提前感谢。

编辑:谢谢你的回答,我想我可能没有把问题问清楚。在我的angular应用中,我理解路由等。所以当点击一个"/about"href时,把它设置为加载"partials/about.html"。我的问题是,假设这是已经工作,用户直接去'www.myapp.com/about'。angular应用"存活"在根节点上。因此,服务器可能会重定向到'/'。这会加载应用,但不会把angular"设置"为用户期望的路由。所以问题是,有没有办法告诉应用"当你加载时,去/about"也许是基于referrer之类的。

您使用的是哪台服务器?

你可以在路由器中创建一个通用路由。如match '*' => 'Angular#App' (Rails)

or (express)

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

我想你说的是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: '/'});
  }])

如果你在服务器端设置了部分,也设置了控制器,当用户导航到每个url时,正确的控制器和部分将被拉出来,你可以选择在每个控制器中做任何你需要的事情。

你也可以使用其他选项,我只是这样使用路由。查看AngularJS文档获取更多信息

最新更新