2016-05-11 13 views
4

Angular 1.5 Componentsを使用する小さなWebアプリケーションがあります。サーバーを起動すると、ブラウザは私にhttp://127.0.0.1:50001/welcomeにリダイレクトされ、これが期待され、ようこそページが表示されます。新しいユーザーを作成したい場合、リンクをクリックするとURLがhttp://127.0.0.1:50001/welcome/newUserに変わり、新しいユーザーフォームが表示されます。ブラウザからAngular Componentに直接アクセスすることはできません

URLに直接アクセスする(またはページを更新する)ときに問題が発生します。ページは単に読み込まれません。コンソールにエラーは表示されません。何も起こりません。

私の設定は以下の通りである:

ルートコンポーネント:

.component('webGuiComponent', { 
    template: '<ng-outlet></ng-outlet>', 
    $routeConfig: [ 
    { path: '/welcome/...', name: 'Welcome', component: 'welcomeComponent', useAsDefault: true } 
    ] 
}) 

.value('$routerRootComponent', 'webGuiComponent'); 

ようこそコンポーネント:

.component('welcomeComponent', { 
    template: '<header></header><ng-outlet></ng-outlet>', 
    $routeConfig: [ 
    { path: '/', name: 'Index', component: 'indexComponent', useAsDefault: true }, 
    { path: '/newUser', name: 'NewUser', component: 'newUser' } 
    ] 
}) 

.component('indexComponent', { 
    templateUrl: '/app/components/welcome/index.html' 
}); 

新規ユーザコンポーネント:

.component('newUser', { 
    controller: 'userController', 
    templateUrl: '/app/components/user/new.html' 
}) 

ナビゲーションリンクは、スタンドを使用していますARDのNG-リンク:

<a class="navbar-brand" ng-link="['/Welcome/Index']">Web GUI</a> 
<a class="navbar-brand" ng-link="['/Welcome/NewUser']">Sign Up</a> 

直接URLにアクセスする際のナビゲーションがNGリンクを経由して行われたときに動作しますが、ではない、なぜ誰もが知っていますか?

+0

[http://127.0.0.1:50001/welcome/newUser](http://127.0.0.1:50001/welcome/newUser)をブラウザに直接ロードすると、あなたのサーバーテクノロジノード/ asp.netなどを使用して? –

+0

それは全く何もロードしません - ウェブサイトがその住所に何も持っていなかったようにページは「白い」のままです。私はdevのためのノードのhttpサーバを使用していますが、Tomcatにデプロイすると同じことが起こります。 – cldjr

答えて

4

メインページをレンダリングするクライアント側で定義されたルートを持つすべてのパスに対してサーバー側のルートを追加する必要があります。実装は、使用しているサーバー側の技術によって異なります。

それとも、あなたが#ベースのURLのブラウザを持っていないのURL

説明

を#based使用する必要がありますが、リソースを取得するために、サーバーに行くが、何も見つけていません。したがって、サーバー側のルーティングを定義すると、メインページが提供され、クライアント側のルーティングが行われます。

+0

これは理にかなっていて、以前は気付かなかったので馬鹿げた気分になりました:)角度のあるコンポーネントで#URLを使用する方法や、サーバー側でマップする方法を見つけます。ありがとう。 – cldjr

+0

クリックしたときにコードが動作するのは、通常はサーバーが検出しないURLへの移動を妨げているからです。 Madhu Ranjanさんのように、これらのURLの1つに直接アクセスしようとすると、傍受するJavaScriptがありません。私はハッシュを実装する最も簡単な方法は、http://127.0.0.1:50001/welcome /#newUserのような正しいページURLの直後に挿入することです、あるいは、より多くの情報が必要な場合は、卑劣な"http://127.0.0.1:50001/welcome /#/ newUser/newUserParameter/AnotherParameter' – vahanpwns

+0

@Madhu Ranjanのように"偽のディレクトリ "のようになります。私は同じ問題があります。私はすでにweb.configのURLを書き換えてサーバー側のルーティングを行っています。私はWebサーバーとしてIISを使用しています –

3

すべてのURLをインデックスページまたはバックエンドのデフォルトルートに書き換えるには、サーバーにURL書き換えを設定する必要があります。

関連する問題