angle.jsでHTML5プッシュステートを使用する


84

Angularjsで使用される#ナビゲーションの代わりにhtml5のpushstateを実装しようとしています。私は答えをグーグルで検索しようとしました、そしてまたまだ運がないのに角のある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'
            });
    }])

回答:


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年

同じことをしましたが、/ phone /:phoneIdをクリックすると、テンプレートのURLがphones / partials / phone-detail.htmlになり、firebugネットタブにhtmlページが見つかりませんと表示されます
Ajay Beniwal 2012

また、ブラウザで特定のURLに移動するたびに(たとえば、の/home代わりに/)ページが見つかりません。自分のサイトでhtml5を有効にしてみましたか?
Andriy Drozdyuk 2012

37
ページを正しくプルできるようにサーバーを構成する必要があります。に移動しようとするとmysite.com/hello、サーバーからそのページを取得しようとしています。代わりに、ブラウザーでGETを実行して mysite.comから、angularを使用してブラウザーの場所を見つけ、/helloそこに移動します。したがって、mysite.comどのサブドメインが入力されてもデータを返すようにサーバーを構成する必要があります。
Andrew Joslin 2012

18
残りのAPIを/api何かに置いてから、/ api / *以外のすべてをindex.htmlで提供するようにします。
Andrew Joslin 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.