在angular.js上使用HTML5 pushstate


84

我正在尝试实现html5的pushstate而不是Angularjs使用的#导航。我已经尝试过在Google上寻找答案,还尝试了没有运气的有角度的irc聊天室。

这是我的controllers.js

function PhoneListCtrl($scope, $http) {
    $http.get('phones/phones.json').success(function(data) {
        $scope.phones = data;
    });
}

function PhoneDetailCtrl($scope, $routeParams) {
  $scope.phoneId = $routeParams.phoneId;
}

function greetCntr($scope, $window) {
    $scope.greet = function() {
    $("#modal").slideDown();
    }
}

app.js

angular.module('phoneapp', []).
    config(['$routeProvider', function($routeProvider){
        $routeProvider.
            when('/phones', {
                templateUrl: 'partials/phone-list.html',
                controller: PhoneListCtrl
            }).
            when('/phones/:phoneId', {
                templateUrl: 'partials/phone-detail.html',
                controller: PhoneDetailCtrl
            }).
            otherwise({
                redirectTo: '/phones'
            });
    }])

Answers:


129

将$ locationProvider注入您的配置,然后设置$locationProvider.html5Mode(true)

http://docs.angularjs.org/api/ng.$locationProvider

简单的例子:

JS:

myApp.config(function($routeProvider, $locationProvider) {
  $locationProvider.html5Mode(true);
  $routeProvider
    .when('/page1', { template: 'page1.html', controller: 'Page1Ctrl' })
    .when('/page2', { template: 'page2.html', controller: 'Page2Ctrl' })
});

HTML:

<a href="/page1">Page 1</a> | <a href="https://stackoverflow.com/page2">Page 2</a>

当routeProvider已经有config()时,我可以看到一个代码示例吗?不知道是要为此创建新的config()还是将其作为配置数组添加到第一个config()中,也不确定configFn应该是什么(docs.angularjs.org/api/angular.module
Mike Crittenden 2012年

我做过同样的事情,但是当我单击/ phones /:phoneId时,模板网址变为phone / partials / phone-detail.html,并且firebug网络选项卡显示未找到html页
Ajay Beniwal 2012年

每当我在浏览器中导航到给定的网址(例如/home而不是/)时,我也都找不到页面。您是否尝试过为自己的网站启用html5?
Andriy Drozdyuk

37
您必须配置服务器以允许您正确提取页面。当您尝试导航到时mysite.com/hello,它正在尝试从服务器中获取该页面。相反,您希望浏览器进行GET mysite.com,然后使用angular查找浏览器的位置,/hello然后再去那里。因此,mysite.com无论输入哪个子域,都需要配置服务器以退还数据。
安德鲁·乔斯林

18
我想说说您的其余API是/api什么,然后使除/ api / *之外的所有内容都发出index.html。
安德鲁·乔斯林
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.