angular2:使用 *ngIf 构建 svg 图标对 DOM 没有任何帮助
angular2: building svg icons with *ngIf adds nothing to DOM
我正在使用 icoMoon 导入一些 SVG 图标。
我想使用 ngIf 构建的 html 遵循以下模式:
<div class="contactIcon">
<svg class="icon icon-envelop">
<use xlink:href="symbol-defs.svg#icon-envelop"></use>
</svg>
</div>
所以我正在导出带有图标和 xlink 属性的图标数组:
export class NavigationComponent {
icons = [{
icon: 'icon icon-envelop',
xlink: 'symbol-defs.svg#icon-envelop'
},
{
icon: 'icon icon-facebook2',
xlink: 'symbol-defs.svg#icon-facebook2'
},
{
icon: 'icon icon-linkedin',
xlink: 'symbol-defs.svg#icon-linkedin'
},
{
icon: 'icon icon-mobile',
xlink: 'symbol-defs.svg#icon-mobile'
}];
}
我的 html 看起来像这样:
<div *ngFor="#i of icons" class="contactIcon">
<svg [attr.class]="i.icon">
<use [attr.xlink:href]="i.xlink"></use>
</svg>
</div>
但是当我检查页面时,没有添加任何内容,控制台中也没有显示任何错误。我只看到这条评论:
<!--template bindings={}-->
有人可以指出我做错了什么吗?
据我所知,解决方法是静态添加 xlink:href
属性。绑定可以修改此类 SVG 属性,仅添加不起作用。这是一些潜在的浏览器问题。聚合物也一样:
<div *ngFor="#i of icons" class="contactIcon">
<svg [attr.class]="i.icon">
<use xlink:href="" [attr.xlink:href]="i.xlink"></use>
</svg>
</div>
我正在使用 icoMoon 导入一些 SVG 图标。
我想使用 ngIf 构建的 html 遵循以下模式:
<div class="contactIcon">
<svg class="icon icon-envelop">
<use xlink:href="symbol-defs.svg#icon-envelop"></use>
</svg>
</div>
所以我正在导出带有图标和 xlink 属性的图标数组:
export class NavigationComponent {
icons = [{
icon: 'icon icon-envelop',
xlink: 'symbol-defs.svg#icon-envelop'
},
{
icon: 'icon icon-facebook2',
xlink: 'symbol-defs.svg#icon-facebook2'
},
{
icon: 'icon icon-linkedin',
xlink: 'symbol-defs.svg#icon-linkedin'
},
{
icon: 'icon icon-mobile',
xlink: 'symbol-defs.svg#icon-mobile'
}];
}
我的 html 看起来像这样:
<div *ngFor="#i of icons" class="contactIcon">
<svg [attr.class]="i.icon">
<use [attr.xlink:href]="i.xlink"></use>
</svg>
</div>
但是当我检查页面时,没有添加任何内容,控制台中也没有显示任何错误。我只看到这条评论:
<!--template bindings={}-->
有人可以指出我做错了什么吗?
据我所知,解决方法是静态添加 xlink:href
属性。绑定可以修改此类 SVG 属性,仅添加不起作用。这是一些潜在的浏览器问题。聚合物也一样:
<div *ngFor="#i of icons" class="contactIcon">
<svg [attr.class]="i.icon">
<use xlink:href="" [attr.xlink:href]="i.xlink"></use>
</svg>
</div>