Sử dụng HTML5 pushstate trên angle.js


84

Tôi đang cố gắng triển khai pushstate của html5 thay vì điều hướng # được Angularjs sử dụng. Tôi đã thử tìm kiếm trên google để tìm câu trả lời và cũng đã thử vào phòng chat irc góc cạnh mà không may mắn.

Đây là của tôi 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'
            });
    }])

Câu trả lời:


129

Chèn $ locationProvider vào cấu hình của bạn và thiết lập $locationProvider.html5Mode(true).

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

Ví dụ đơn giản:

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>

Tôi có thể xem mẫu mã cho điều này khi đã có config () cho routeProvider không? Không chắc liệu tôi đang tạo một cấu hình mới () cho cái này hay thêm nó vào cái đầu tiên dưới dạng một mảng cấu hình và cũng không chắc configFn phải là gì ( docs.angularjs.org/api/angular.module )
Mike Crittenden

Tôi đã làm điều tương tự nhưng khi tôi bấm / điện thoại /: phoneId mẫu url điện thoại trở thành / partials / điện thoại detail.html và firebug ròng trang hiển thị tab html không tìm thấy
Ajay Beniwal

Tôi cũng nhận được trang không tìm thấy bất cứ khi nào tôi điều hướng đến một url nhất định trong trình duyệt (ví dụ: /homethay vì /). Bạn đã thử bật html5 cho trang web của mình chưa?
Andriy Drozdyuk 25/12/12

37
Bạn phải định cấu hình máy chủ của mình để cho phép bạn kéo các trang một cách chính xác. Khi bạn cố gắng điều hướng đến mysite.com/hello, nó đang cố lấy trang đó từ máy chủ của bạn. Thay vào đó, bạn muốn trình duyệt GET mysite.comvà sau đó sử dụng góc để tìm vị trí của trình duyệt /hellovà đến đó. Vì vậy, bạn cần định cấu hình máy chủ của mình để cung cấp lại mysite.comdữ liệu cho dù miền phụ nào được nhập.
Andrew Joslin 27/12/12

18
Tôi muốn nói rằng hãy đặt API phần còn lại của bạn tại /apihoặc một cái gì đó, và sau đó tạo mọi thứ trừ / api / * đưa ra index.html.
Andrew Joslin,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.