13

$routeProviderは次のように構成されています:

teachApp.config(['$routeProvider', '$locationProvider', function($routeProvider,       $locationProvider) {
    $routeProvider.
        when('/teach/', {templateUrl: 'views/login_view.html'}).
        when('/teach/overview', {templateUrl: 'views/overview_view.html'}).
        when('/teach/users', {templateUrl: 'views/users_view.html'}).
        otherwise({redirectTo: '/teach/'});
    $locationProvider.html5Mode(true);
}]);

アプリ内で、などのリンクをクリックすると<a href="/teach/overview">Overview</a>、概要の一部が期待どおりに表示されます。ただし、アドレスバーのURLを手動でまったく同じURLに変更すると、404エラーが発生します。正しく$routeProvider構成されていませんか?

アプリのルートURLがであるMAMPローカルホストを使用していますhttp://localhost/teach/

4

2 に答える 2

15

URLに#を使用することもできます。

http://localhost/teach/#/overview

これはサーバーにリクエストを送信せず、代わりにAngular$routeProviderによってインターセプトされます。

于 2013-03-06T21:30:45.073 に答える
13

すべてのパスをrootにリダイレクトするようにapacheを設定する必要があります。

Webサーバーを直接開くhttp://localhost/teach/overviewと、定義されていないルートからページを提供しようとしています。

Angularアプリ内で、Hrefパスがのリンクをクリックするとhttp://localhost/teach/overview、Angularがステップインし、ブラウザーにサーバーからのページを要求させる代わりに、クリックイベントをインターセプトし、routeProviderに移動してクライアント側のビューを確認します表示する(これが「シングルページアプリ」と呼ばれる理由です)。そのため、リンクを直接開かない限り、リンクは機能します。

apache構成のほかに、basehref値が/teach/:のタグを使用することもできます。

<base href="/teach/" />

routeProviderを固定プレフィックスに制約されないようにするために、次のようにします。

teachApp.config(['$routeProvider', '$locationProvider', function($routeProvider,       $locationProvider) {
    $routeProvider.
        when('/', {templateUrl: 'views/login_view.html'}).
        when('/overview', {templateUrl: 'views/overview_view.html'}).
        when('/users', {templateUrl: 'views/users_view.html'}).
        otherwise({redirectTo: '/'});
    $locationProvider.html5Mode(true);
}]);
于 2013-03-06T15:13:24.937 に答える