2017-11-15 12 views
0

ProductListComponentを作成し、子コンポーネントのProductRowComponentにアクセスしました。コードは、私がスタイル 角4 - @HostBindingは、cssクラスをホスト要素にバインドしますが、正しくはレンダリングしません。

.selectedItem { 
    background-color: blue; 
    color: white; 
} 

を定義し

ProductListComponent

import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; 
import { Product } from '../product'; 
    @Component({ 
     selector: 'products-list', 
     template: ` 
      <product-row *ngFor="let myProduct of productList" 
         [product]="myProduct" 
         (click)="clicked(myProduct)" 
         [class.selectedItem] = "isSelected(myProduct)"> 
      </product-row> 
     ` 
    }) 
    export class ProductsListComponent implements OnInit { 
     @Input() productList: Product[]; 
     @Output() onProductSelected: EventEmitter<Product>; 

     constructor() { 
     this.onProductSelected = new EventEmitter(); 
     } 

     clicked(product: Product): void { 
     this.currentProduct = product; 
     this.onProductSelected.emit(product); 
     } 

     isSelected(product: Product): boolean { 
     if(!product || !this.currentProduct) { 
      return false; 
     } 
     return this.currentProduct.sku === product.sku; 
     } 
    } 

ProductRowComponent

import { Component, Input, HostBinding } from '@angular/core'; 
import { Product } from '../product'; 

@Component({ 
    selector: 'product-row', 
    template: ` 
    <div class="card"> 
    <div class="card-block"> 
    <h4 class="card-title">{{product.name}}</h4> 
    <p class="card-text"> 
     {{product.price}} 
    </p> 
    </div> 
</div> 
    ` 
}) 
export class ProductRowComponent { 
    @Input() product: Product; 
    @HostBinding('attr.class') cssClass = "selectedItem"; 
} 

の下にリストされている。しかし、それは選択された製品に右のスタイルを適用されていません。私はブラウザウィンドウをデバッグし、そのスタイルがホスト要素のproduct-rowに適用されていることを確認しました。

**<product-row** ng-reflect-product="[object Object]" **class="selectedItem"**> 
    <div class="card"> 
    <div class="card-block"> 
    <h4 class="card-title">Black Running Shoes</h4> 
    <p class="card-text"> 
     109.99 
    </p> 
    </div> 
</div> 
</product-row> 

私は間違っていますか?

+0

あなたはあなたのcssクラス 'selectedItem'をどこで宣言しましたか –

+0

私はstyle.cssで宣言しました – user1042554

答えて

0

この目的のために、コンポーネントではなく@HostBindingで属性ディレクティブを使用する必要があります。

関連する問題