angular $ routeProvider with html5

时间:2016-01-21 07:46:47

标签: angularjs angular-ui-router

当我正确使用html5mode时,$routeProvider出现问题。 当我访问/profile/: child时,它会很好,但是当页面刷新时,那么在页面上将是错误。我的代码下面有什么问题:

app.config(function ($routeProvider, $locationProvider) {

var pathViews = function (file) {
    return 'http://localhost/mycompany/app/views/' + file;
};
var pathError = function (file) {
    return 'app/views/error/' + file;
};
$locationProvider.html5Mode(true);
$routeProvider
    .when('/', {
        templateUrl: pathViews('dashboard.html'),
        controller :'MainCtrl'
    })
    .when('/home', {
        templateUrl: pathViews('dashboard.html'),
        controller :'MainCtrl'
    })
    .when('/profile/:child', {
        templateUrl: function($routeParams) {
            return pathViews($routeParams.child+'.html')},
                controller:'MainCtrl'
    })
    .when('/404', {
        templateUrl: pathError('404.html'),
        controller :'MainCtrl'
    })
    .when('/form-standard', {
        templateUrl: pathViews('form-standard.html'),
        controller :'MainCtrl'
    })
    .otherwise({redirectTo: '/404'});});

并且index.html是: <div ng-view ></div>

1 个答案:

答案 0 :(得分:1)

这是正常的,因为当您刷新页面时,您的Web服务器会尝试加载服务器上不存在的请求资源,而是在客户端处理。

例如,如果您部署&#34; routeProvided&#34;在Apache上使用angularjs应用程序,您应该编辑.htaccesssource):

RewriteEngine on

# Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# Rewrite everything else to index.html to allow html5 state links
RewriteRule ^ index.html [L]

简单来说,您必须告诉您的Web服务器将每个请求重定向到主模块入口点。