2017-01-17 15 views
0

私は*ngForの各アイテムがjsonからレンダリングされたリストを生成しました。クリックしてください* ngルータ出口のアイテムAngular2

私が欲しいのは、私のrouter-outletの中のクリックしたアイテムを見て、他のアイテムを隠すことです。

商品リストと製品カードのことを考えてください。特定の商品をクリックすると、その商品の全ページにリダイレクトされました。だから、私は同じアプローチが必要です。

クリックすると、必要なURLが取得されます。だから私はrouter-outletビューのための特別なURLを設定する必要はありません、ちょうどそこにクリックされたアイテムをレンダリングします。

マイ*ngFor構造:

<div class="releases-component"> 
    <div class="release" 
    *ngFor="let release of releases" 
    (click)="routerDisplay($event)"> 

     <img src="{{release.image}}" 
     alt="Release image" 
     [routerLink]="['/releases', release.id ]"> 

     <h3 class="release--name" 
     [routerLink]="['/releases', release.id ]">{{release.name}}</h3> 

     <span class="release--year" 
     [routerLink]="['/releases', release.id ]">{{release.year}}</span> 
    </div> 

    <div class="release--view"> 
     <router-outlet>{{ The Clicked Item! }}</router-outlet> 
    </div> 
</div> 

マイサービス:

import { Injectable } from '@angular/core'; 
import { Http, Response } from '@angular/http'; 

import 'rxjs/add/operator/map'; 

@Injectable() 
export class ReleasesService { 

    constructor(private http: Http) { 

    } 


    getReleases() { 
     return this.http.request('./allReleases.json') 
     .map(res => res.json()); 
    } 

    getData(res: Response){ 

    } 

    getReleaseInfo(){ 

    } 
} 

マイjson

[ 
    { 
     "id":"release-1", 
     "name": "Release1 name", 
     "image": "./cover1.jpg", 
     "year": "2014" 
    }, 
    { 
     "id":"release-2", 
     "name": "Release2 name", 
     "image": "./release2.jpg", 
     "year": "2015" 
    } 
] 

そして、私のルート:

const routes: Routes = [ 
    { path: '', component: HomeComponent }, 
    { path: 'releases', component: ReleasesComponent }, 
    { path: 'releases/:id', component: ReleasesComponent }, 
    { path: 'distro', component: DistroComponent }, 
    { path: 'contacts', component: ContactsComponent } 
]; 
+0

「他のアイテムを隠しているうちに、ルーターのアウトレットビューでクリックしたアイテムを取得する」とは全くわかりません。意味することができます。あなたは ''に何かを表示することはできません。あなたはルートにナビゲートするようにルータに指示します。ルータは ''にそのルート用に設定されたコンポーネントを表示します。 –

+0

表示されるコンポーネント、htmlタグのjsonベースのレンダリングだけです。 私が次のことを意味するという言い回しによって、アイテムのリストがあります。アイテムをクリックすると、そのアイテムのページにリダイレクトされます。しかし、ルータの出口があるので、クリックされたアイテムだけを表示したいと思います。それはリダイレクトの動作を模倣します。しかし、実際にはビューから他のアイテムを削除し、名前、ID、イメージ、リリース年など必要なJSONパラメータをクリックしたものだけを残してください。 P.P.ちょうどオンラインストアのように - あなたは商品のリストを参照し、クリックしてそのページにリダイレクトされます –

答えて

1
 <div class="releases-component"> 
      <div class="release" 
      *ngFor="let release of releases" 
      (click)="routerDisplay($event),onSelect(release)"> 

       <img src="{{release.image}}" 
       alt="Release image" 
       [routerLink]="['/releases', release.id ]"> 

       <h3 class="release--name" 
       [routerLink]="['/releases', release.id ]">{{release.name}}</h3> 

       <span class="release--year" 
       [routerLink]="['/releases', release.id ]">{{release.year}}</span> 
      </div> 

      <div class="release--view" *ngIf="selectedRelease"> 
      <label>id: {{selectedRelease.id}}</label><br/> 
      <label>name: {{selectedRelease.id}}</label><br/> 
      <label>year : {{selectedRelease.year}}</label><br/> 
      </div> 
     </div> 

In you controller: 
onSelect(release){ 
this.selectedRelease=release; 
    } 
+0

コンパイラは複数のクリックアクションをサポートしていないようです。 "routerDisplay($ event)、onSelect(release)"にエラーがスローされますが、onSelectだけが残っていればすべて正常に動作します!あなたは好きそれを使用することができ –

+1

: "にonSelect(($イベント、リリースは)" ビューで、 にonSelect(イベント、リリース){ this.selectedRelease =放し; this.routerDisplay(イベント);} – ani5ha

関連する問題