#angular #angular-material #material-design #angular7
#angular #angular-материал #материал-дизайн #angular7
Вопрос:
не удается отобразить svgIcon. я ввожу iconName в качестве входных данных в svgIcon.
Имя, цена отображаются корректно, если удалить <mat-icon>
.
с ошибкой show me, как показано ниже:
Ошибка типа: iconName.split не является функцией в MatIcon.push../node_modules/@angular/material/esm5/icon.es5.js.MatIcon._splitIconName
app.component.ts
getList(): ItemModel[] {
const dataList: ItemModel[] = [];
// let dataKey: string[] = [];
const tempSanitizer = this.sanitizer;
const tempService = this.service;
Object.keys(this.service.dataSource).forEach( (key: string) => {
dataList.push(this.service.dataSource[key]);
// if (!tempService.dataSource.hasOwnProperty(key)) {
// console.log(key);
// }
// console.log(tempService.dataSource[key].icon);
this.iconRegistery.addSvgIcon(
key,
tempSanitizer.bypassSecurityTrustResourceUrl(tempService.dataSource[key].icon)
);
}
);
return dataList;
}
app.component.html
<app-grid-beer [title]="'Top Weekly'" [itemList]="getList()"></app-grid-beer>
<!-- [dataSource]="" -->
<app-grid-beer [title]="'Ever Green'" [itemList]="getList()"></app-grid-beer>
grid-beer.component.html
<mat-grid-tile *ngFor="let item of itemList">
<div fxLayout="column" fxLayoutGap="5px" fxLayoutAlign="center center">
<mat-icon [svgIcon]="item.id" class="section-icon-height"></mat-icon>
<span>{{item.id}}</span>
<mat-label class="subtitle-1">{{item ? item.name : ''}}</mat-label>
<label class="h6-header"><mat-icon svgIcon="rupee" class="rupee-icon"></mat-icon>{{item ? item.price : '' }}</label>
</div>
</mat-grid-tile>
Комментарии:
1. Вы передаете
item.id
в[svgIcon]
, который на самом деле ожидает строку2. item.id тип — string.
3. Вы вообще возвращаете список, я не вижу инструкции return?
4. Я все еще думаю, что @TusharWalzade прав и
item.id
это не строка. Можете ли выconsole.log(typeof item.id)
полностью убедиться? В качестве альтернативы, покажите нам, какItemModel
определяется.5. Попробуйте:
npm install
?