File
Implements
Metadata
| changeDetection |
ChangeDetectionStrategy.OnPush |
| providers |
ProductListItemContextSource
{
provide: ProductListItemContext, useExisting: ProductListItemContextSource,
}
|
| selector |
cx-product-grid-item |
| templateUrl |
./product-grid-item.component.html |
Index
Properties
|
|
|
Methods
|
|
|
Inputs
|
|
|
|
product
|
Type : any
|
Decorators :
@Input()
|
|
|
|
Readonly
ProductListOutlets
|
Default value : ProductListOutlets
|
|
|
import {
ChangeDetectionStrategy,
Component,
Input,
OnChanges,
SimpleChanges,
} from '@angular/core';
import { ProductListOutlets } from '../../product-outlets.model';
import { ProductListItemContextSource } from '../model/product-list-item-context-source.model';
import { ProductListItemContext } from '../model/product-list-item-context.model';
@Component({
selector: 'cx-product-grid-item',
templateUrl: './product-grid-item.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [
ProductListItemContextSource,
{
provide: ProductListItemContext,
useExisting: ProductListItemContextSource,
},
],
})
export class ProductGridItemComponent implements OnChanges {
readonly ProductListOutlets = ProductListOutlets;
@Input() product: any;
constructor(
protected productListItemContextSource: ProductListItemContextSource
) {}
ngOnChanges(changes?: SimpleChanges): void {
if (changes?.product) {
this.productListItemContextSource.product$.next(this.product);
}
}
}
<a
[routerLink]="{ cxRoute: 'product', params: product } | cxUrl"
class="cx-product-image-container"
tabindex="-1"
>
<cx-media
class="cx-product-image"
[container]="product.images?.PRIMARY"
format="product"
[alt]="product.summary"
></cx-media>
</a>
<a
[routerLink]="{ cxRoute: 'product', params: product } | cxUrl"
class="cx-product-name"
[innerHTML]="product.nameHtml"
></a>
<ng-template [cxOutlet]="ProductListOutlets.ITEM_DETAILS">
<div class="cx-product-rating">
<cx-star-rating
*ngIf="product.averageRating"
[rating]="product?.averageRating"
></cx-star-rating>
<div *ngIf="!product.averageRating">
{{ 'productDetails.noReviews' | cxTranslate }}
</div>
</div>
<div class="cx-product-price-container">
<div
class="cx-product-price"
[attr.aria-label]="'productDetails.productPrice' | cxTranslate"
>
{{ product.price?.formattedValue }}
</div>
</div>
</ng-template>
<ng-template [cxOutlet]="ProductListOutlets.ITEM_ACTIONS">
<cx-add-to-cart
*ngIf="product.stock?.stockLevelStatus !== 'outOfStock'"
[showQuantity]="false"
[product]="product"
></cx-add-to-cart>
</ng-template>
Legend
Html element with directive