2016-10-18 16 views
1

コードにui-sref="portal.main.content"がいくつかある場合、アプリケーションを継承しました。角州のプロバイダが完全なURLを表示しない

私が混乱しているのは、この状態に移動するには、/#/ portal/main/contentと入力する必要があるということです。

ただし、ページには#が表示されずにレンダリングされます。したがって、ページをクリックすると機能しますが、新しいページが存在しないため新しいタブを開くと機能しません。私はここで何が欠けていますか?

答えて

1

この問題は、アプリケーションがサーバーファイルシステム上の実際のリソースの実際のパスであるかのようにURLを処理するサーバー環境から提供されるという事実に起因します。したがって、1つのページにある場合は、ui-routerが内部でこれを処理するため、404または403というエラーは発生しませんが、別の状態のURLに移動するとリロードされませんが、ページを初めて読み込むときにはあなたが探しているリソースが存在しないか、または禁止されているため、404403のエラーが表示されます。

あなたがしなければならないことは、あなたが(cssとjsファイルのような)ファイルを参照していないときにindex.htmlページをターゲットにするようにサーバー側環境を設定することです。したがって、URLはすべてindex.htmlページのURL ui-routerによって処理されます。各サーバー側の技術(Apache、IIS、node.jsなど)は、これを処理する方法が異なりますが、ほとんどの場合、URL書き換えモジュールとそれに似た方法があります。

また、URLのようなハッシュを使用しても問題がない場合は、を無効にしてui-routerがそのようなことをしないようにすることができます。あなたの.config$locationProviderを注入し、そのようにそれを無効にすることでこれを実現することができます。たとえば$locationProvider.html5Mode(false);

angular.module('myApp', ['ui.router']) 
    .config(function ($stateProvider, $locationProvider) { 
     $stateProvider 
      .state('home', { 
       url: '', 
       templateUrl: 'views/home.html', 
       controller: 'HomeCtrl' 
      }) 
      .state('about', { 
       url: '/about', 
       templateUrl: 'views/about.html', 
       controller: 'aboutCtrl' 
      }); 

     $locationProvider.html5Mode(false); 
    }); 
+0

正しいです。ですから、どうすればui-srefを使うときにハッシュがURLの一部になるようにレンダリングするのでしょうか。ハッシュでURLを手動で入力するとうまくいきます。 – KingKongFrog

+0

@KingKongFrogは前のコメントであなたの質問に答えて、私は私の答えを更新しました。 –

関連する問題