4

いくつかのルートが指定されています。

app.config(["$routeProvider", "$locationProvider", function($routeProvider, $locationProvider) {
    $routeProvider.
    when("/", {
        templateUrl: "/ajax/home.html",
        controller: "HomeController"
    }).
    when("/test/:id", {
        templateUrl: "/ajax/test.html",
        controller: "TestController",
        resolve: {
            data: function ($q, $http, $route) {
                var deferred = $q.defer();
                var params = $route.current.params;

                $http({method: "GET", url: "/api/test/" + params.id + ".json"})
                    .success(function(data) {
                        deferred.resolve(data)
                    })
                    .error(function(data){
                        deferred.reject();
                    });

                return deferred.promise;
            }
        }
    });

    $locationProvider.html5Mode(true);

}]);

につながる別のルートにリンクがある場合は、/test/x正常に動作します。HTML5 モードでない場合も問題なく動作します。ただし、HTML5 モードで直接移動すると/test/x、ルートは読み込まれず、解決されたものは実行されません。

私は AngularJS のドキュメントの多くを調べましたが、まだこれを理解できません。お願いします:(

編集:さらにテストを行いましたが、これはスラッシュが含まれるルートのみです。:idパラメータ( など)が含まれているかどうかは問題ではないようです。(そのルート/helloが定義されている場合) への移動は、HTML5 モードと非 HTML5 モードの両方のすべてのケースで機能します。/hello/world常に非 HTML5 モードで機能し、リンクをクリックしてルートが別のルートから変更されたときに HTML5 モードで機能するようなものに移動します。on のときに更新する/hello/worldと、アドレス バーに移動して Enter キーを押すか、別の Web サイトからそのアドレスへのリンクをクリックすると、インデックス ページが再読み込みされますが、実際のルートは再読み込みされません。

4

2 に答える 2

5

セクションに追加<base href="/" />すると<head>、発生している問題に応じて修正されます。

(これが私にとっての答えだったので、これに遭遇した他の人にとってより明白にしたかったのです)

指摘してくれた @ user27766 に感謝します。

于 2014-10-27T09:02:30.023 に答える
0

$location サービスの角度付きドキュメントでは、 HTML5 モードを使用すると、サーバー側で URL 書き換えを使用して、アプリケーションのエントリ ポイント (index.html など) へのすべてのリンクを書き換える必要があることが示されています。

アプリケーションの提供に Apache を使用している場合は、次の.htaccessようにファイルを設定できます。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^test/[0-9]+$ index.html [L]

これにより、リクエストがリダイレクトさ/test/<number>index.html、angular はそれを適切にルーティングできるはずです。

于 2013-07-04T14:27:55.280 に答える