更改URL并在angularjs中重新加载页面

时间:2014-12-12 08:32:26

标签: angularjs

我希望在从其他网站获取凭据后,更改我的angularJS应用程序中的网址。

我正在设置我的应用

angular.module('demoApp', [])
.config(function ($routeProvider, $locationProvider) {
$routeProvider
  .when('/', {
    templateUrl: 'views/main.html',
    controller: 'MainCtrl'
  })
  .when('/example', {
    templateUrl: 'views/example.html',
    controller: 'ExampleCtrl'
  })
  .otherwise({
    redirectTo: '/'
  });

$locationProvider.html5Mode(true);
})

在我的MainCtrl控制器中,我改变了这样的URL:

$location.url($location.path()); // to remove url query params
$location.path('/example'); // to change the url

但是当我刷新页面时,这个原因无法获取/示例。

有解决方法吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

当您激活HTML5模式时,您没有处理所需的URL重写(实际上,/ example url不存在,现在唯一有角度的现有URL是index.html)

所以你必须处理URL重写服务器端..例如对于.htaccess文件中的apache:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule !\.\w+$ index.html [L]
</IfModule>

或者如果您使用的是grunt-connect

connect: {
    dev: {
        options: {
            port: 9002,
            hostname: '*',
            middleware: function(connect) {
                return [
                    //modRewrite is used to handle properly angularjs' html5 mode
                    modRewrite(['^[^\\.]*$ /index.html [L]']),
                    lrSnippet,
                    folderMount(connect, '/app')
                ];
            }
        }
    }
}

还有一件事,小心点,你正在进行双重位置变更。如果你想删除查询参数,我会劝你这样做:

$location.path(url);

// clear any query params
$location.$$search = {};
$location.$$compose();