在angular.js上使用HTML5 pushstate

hil*_*arl 84 javascript angularjs

我正在尝试实现html5的pushstate而不是Angularjs使用的#navigation.我试过搜索谷歌的答案,并尝试了角度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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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'
            });
    }])
Run Code Online (Sandbox Code Playgroud)

And*_*lin 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' })
});
Run Code Online (Sandbox Code Playgroud)

HTML:

<a href="/page1">Page 1</a> | <a href="/page2">Page 2</a>
Run Code Online (Sandbox Code Playgroud)

  • 您必须配置服务器以允许您正确地提取页面.当您尝试导航到`mysite.com/hello`时,它会尝试从您的服务器获取该页面.相反,你希望浏览器获取"mysite.com",然后使用angular来查找浏览器的位置是"/ hello"然后去那里.因此,无论输入哪个子域,您都需要配置服务器以返回`mysite.com`数据. (37认同)
  • 我会说你把剩下的API放在`/ api`或者什么东西,然后把所有东西都放在/ api/*中给出index.html. (18认同)