AngularJS $ routeProvider无法直接加载到partial

时间:2014-09-24 11:01:23

标签: javascript angularjs apache angularjs-routing

当前我正在使用$ routeProvider来动态加载页面的各个部分,如下所示:

$routeProvider
    .when('/', {
        templateUrl: '/pages/home.html',
        controller: 'mainController'
    })
    .when('/our-business', {
        templateUrl: '/pages/our-business.html',
        controller: 'businessController',
        css: 'css/_business.css'
    })
    .when('/solutions', {
        templateUrl: '/pages/solutions.html',
        controller: 'solutionsController'
    });

目前,如果我直接转到索引(localhost),然后选择“我们的业务”。从导航菜单中,Angular处理位置请求,页面加载正常,URL更改为 localhost / our-business 。如果我然后重新加载,或直接打开这个URL我得到404错误 - 大概是因为Apache试图打开我们的business.html并不存在。如果我打开 localhost /#/ our-business ,则加载索引,然后Angular处理请求。我遇到的问题是,这是一个面向公众的网站,所以如果用户要复制并粘贴网址或通过电子邮件分享,他们就会收到404错误。

有没有办法让Apache重写URL通过索引和AngularJS来解析它们,这样我们就可以保留非哈希样式但仍然有功能URL?

2 个答案:

答案 0 :(得分:1)

正如Kailash所说,您可以将locationProvider设置为html5模式

$locationProvider.html5Mode(true)

当你引导角度应用程序时。

然后你必须告诉你的Apache服务器发送index.html(单页应用程序的入口点)以获取任何请求的URL。

角度路由器将处理正确的路径

答案 1 :(得分:-1)

不。在没有哈希的情况下更改网址会重新加载整个页面。

$routeProvider的重点是构建具有多个视图的单页应用。

基本上,在网址中使用#是唯一的方法。对url散列的更改不会导致页面重新加载,并允许Angular加载相关视图。