コードにui-sref="portal.main.content"
がいくつかある場合、アプリケーションを継承しました。角州のプロバイダが完全なURLを表示しない
私が混乱しているのは、この状態に移動するには、/#/ portal/main/contentと入力する必要があるということです。
ただし、ページには#
が表示されずにレンダリングされます。したがって、ページをクリックすると機能しますが、新しいページが存在しないため新しいタブを開くと機能しません。私はここで何が欠けていますか?
コードにui-sref="portal.main.content"
がいくつかある場合、アプリケーションを継承しました。角州のプロバイダが完全なURLを表示しない
私が混乱しているのは、この状態に移動するには、/#/ portal/main/contentと入力する必要があるということです。
ただし、ページには#
が表示されずにレンダリングされます。したがって、ページをクリックすると機能しますが、新しいページが存在しないため新しいタブを開くと機能しません。私はここで何が欠けていますか?
この問題は、アプリケーションがサーバーファイルシステム上の実際のリソースの実際のパスであるかのようにURLを処理するサーバー環境から提供されるという事実に起因します。したがって、1つのページにある場合は、ui-router
が内部でこれを処理するため、404
または403
というエラーは発生しませんが、別の状態のURLに移動するとリロードされませんが、ページを初めて読み込むときにはあなたが探しているリソースが存在しないか、または禁止されているため、404
と403
のエラーが表示されます。
あなたがしなければならないことは、あなたが(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);
});
正しいです。ですから、どうすればui-srefを使うときにハッシュがURLの一部になるようにレンダリングするのでしょうか。ハッシュでURLを手動で入力するとうまくいきます。 – KingKongFrog
@KingKongFrogは前のコメントであなたの質問に答えて、私は私の答えを更新しました。 –