2016-10-17 4 views
3

私はasp.net WebアプリケーションでKendoUI DataGridを使用しているAngular 2アプリケーションを開発中です。私はindex.htmlをスタートアップページに設定しました。 F5キーを押すと、index.htmlが読み込まれます。リスクメニューをクリックすると、risk-list.component.htmlページで定義されたデータを持つデータグリッドが表示されます。そのURLはlocalhost/risksです。 F5キーを押すと、404ページが見つかりません。エラー。問題が何であるか教えてもらえますか?どのように修正できますか?角度2のアプリケーションをリフレッシュするとエラー404 - ページが見つかりません例外

これは私のコードです:

リスクlist.Component.ts

import { Component, OnInit } from '@angular/core'; 
import { Risk } from './risk'; 
import { RiskService } from './risk.service'; 

@Component({ 
    moduleId: module.id, 
    selector: 'rm-risks', 
    templateUrl: '/app/risk-list.component.html', 
    providers: [RiskService] 
}) 

export class RiskListComponent implements OnInit { 
    title = 'Risk List'; 
    risks: Risk[]; 

    constructor(private _riskService: RiskService) { 
     console.log(this.risks); 
    } 

    getRisks(): void { 
     this._riskService.getRisks().then(risks => this.risks = risks); 

    } 

    ngOnInit(): void { 
     this.getRisks(); 
    } 
}; 

リスクlist.component.html

<kendo-grid [data]="risks"> 
    <kendo-grid-column field="reference" title="Reference" width="120"> 
    </kendo-grid-column> 
    <kendo-grid-column field="insuredName" title="Insured Name"> 
    </kendo-grid-column> 
    <kendo-grid-column field="inceptionDate" title="Inception Date" width="230"> 
    </kendo-grid-column> 
    <kendo-grid-column field="riskType" title="Risk Type" width="120"> 
    </kendo-grid-column> 
    <kendo-grid-column field="Status" title="Status"> 
    </kendo-grid-column> 
    <kendo-grid-column field="grossPremium" title="Gross Premium" width="230"> 
    </kendo-grid-column> 
    <kendo-grid-column field="allocatedTo" title="Allocated To" width="120"> 
    </kendo-grid-column> 
    <kendo-grid-column field="allocatedCompany" title="Allocated Company"> 
    </kendo-grid-column> 
    <kendo-grid-column field="Discontinued" width="120"> 
     <template kendoCellTemplate let-dataItem> 
      <input type="checkbox" [checked]="dataItem.Discontinued" disabled /> 
     </template> 
    </kendo-grid-column> 
</kendo-grid> 

risk.service。 ts

import { Injectable } from '@angular/core'; 
import { Risk } from './risk'; 
import { Risks } from './mock-risk'; 
import { Http, Response } from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/observable/from'; 


@Injectable() 
export class RiskService { 

    getRisks(): Promise<Risk[]> { 
     return Promise.resolve(Risks); 
    } 

} 

risk.ts

export class Risk { 
    riskId: number; 
    reference: string; 
    insuredName: string; 
    inceptionDate: string; 
    riskType: string; 
    status: string; 
    grossPremium: number; 
    allocatedTo: string; 
    allocatedCompany: string; 

} 

モックrisk.ts

import { Risk } from './risk' 

export const Risks: Risk[] = [ 

    { 

     "riskId": 1, 
     "reference": "HISC9308336", 
     "insuredName": "SA 84161", 
     "inceptionDate": "March 19, 2016", 
     "riskType": "Quote", 
     "status": "Indication", 
     "grossPremium": 100, 
     "allocatedTo": "Broker User", 
     "allocatedCompany": "Broker" 
    }, 
    { 

     riskId: 2, 
     reference: "HISC9308337", 
     insuredName: "SA 84161", 
     inceptionDate: 'April 22, 2016', 
     riskType: 'Quote', 
     status: 'Indication', 
     grossPremium: 300, 
     allocatedTo: 'Broker User', 
     allocatedCompany: 'Broker' 
    } 

]; 

risks.module.ts

import { NgModule } from '@angular/core'; 
import { CommonModule } from '@angular/common'; 
import { FormsModule } from '@angular/forms'; 
import { RiskListComponent } from './risk-list.component'; 
import { RiskService } from './risk.service'; 
import { RiskRoutingModule } from './risks-routing.module'; 
import { GridModule } from '@progress/kendo-angular-grid'; 
@NgModule({ 
    imports: [ 
     CommonModule, 
     FormsModule, 
     RiskRoutingModule, 
     GridModule 

    ], 
    declarations: [ 
     RiskListComponent 
    ], 
    providers: [ 
     RiskService 
    ] 
}) 
export class RisksModule { } 

リスク-routing.module.ts

import { NgModule } from '@angular/core'; 
import { RouterModule } from '@angular/router'; 
import { RiskListComponent } from './risk-list.component'; 

@NgModule({ 
    imports: [ 
     RouterModule.forChild([ 
      { path: 'risks', component: RiskListComponent } 
     ]) 
    ], 
    exports: [ 
     RouterModule 
    ] 
}) 
export class RiskRoutingModule { } 

app.component.html

<h1>Angular Router</h1> 
<nav> 
    <a routerLink="/risks" routerLinkActive="active">Risks</a> 

</nav> 
<router-outlet></router-outlet> 

app.component.ts

import { Component } from '@angular/core'; 

    @Component({ 
     moduleId: module.id, 
     selector: 'my-app', 
     templateUrl:'/app/app.component.html' 
    }) 
    export class AppComponent { } 

APP-ルーティング。 module.ts

import { NgModule } from '@angular/core'; 
import { RouterModule } from '@angular/router'; 
import { RiskListComponent } from './risk-list.component' 
import { HomeComponent } from './home.component' 

@NgModule({ 
    imports: [ 
     RouterModule.forRoot([ 

      { path: '', component: HomeComponent } 
     ]) 
    ], 
    exports: [ 
     RouterModule 
    ] 
}) 
export class AppRoutingModule { } 

main.ts

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 

import { AppModule } from './app.module'; 

platformBrowserDynamic().bootstrapModule(AppModule); 

答えて

2

この問題は、すべてのルートに#を追加HashLocationStrategyを実装することによって解決されます。たとえば、http://localhost/myComponenthttp://localhost/#/myComponentになります。あなたはHashLocationStrategyAppModuleへのプロバイダを追加することでこれを実現:

{ provide: LocationStrategy, useClass: HashLocationStrategy } 

はもちろん、あなたが@angular/commonからLocationStrategyHashLocationStrategyをインポートする必要があります。

import { LocationStrategy, HashLocationStrategy } from '@angular/common'; 

詳細については、Angular 2 Router & Navigation - Browser URL Stylesを確認してください。

+0

あなたが共有しているリンクは、app.moduleにRouterModule.forRoot(ルート、{useHash:true})// ... /#/ crisis-center /を置くように指示します。 ts。私の例では、それはapp-routing.module.tsと信じています。しかし、私のapp-routing.module.tsには、RouterModule.forRootがあります([ {パス: ''、コンポーネント:HomeComponent} ])この行を私にコンパイルエラーが出るので、ここにどのように追加しますか – Tom

+0

@Tom Inあなたのケースは、 'RouterModule.forRoot([{path: ''、コンポーネント:HomeComponent}、{useHash:true})' –

+0

である必要があります。私はLocationStrategyがデフォルトであると読んでいます。 useHash = falseを設定してブラウザをリフレッシュすると、動かない。 – Tom

0

ブラウザがリフレッシュされると、角度がHTML 5形式のナビゲーションを使用しているため、現在のURLを持つサーバーにget要求が送信されます。このURLはサーバーに意味をなさないでしょう。特定のパスでindex.htmlを提供するようにサーバーを更新するか、HashLocationStrategyを使用してください。

HTML 5スタイルのナビゲーションを使用する利点は、角度付きアプリとサーバーレンダリングページを混在させることができることです。

このasp.netで作業を取得する例:角度のhttp://blog.johnnyreilly.com/2015/05/a-tale-of-angular-html5mode-aspnet-mvc.html

もっと読み:https://angular.io/docs/ts/latest/guide/router.html#!#browser-url-styles

+0

あなたの例を私のものと関連付けることができないので、私の例を使って解決する方法を教えてもらえますか?あなたの例は、APIコールを作成しています – Tom

0

見つからないこのError404ページを取り除くための最善の方法、あなたはappModule.ts

HashLocationStrategyをインポートする必要があります

私は以前、このタイプのエラー(404ページが見つかりません)のための単純なリポジトリを作成するために、プロジェクトで発生したAngular、同じタイプのエラーで作業しましたが、役立つかもしれません。ここにリンクがあります - >AngularAppExample

関連する問題