【发布时间】:2018-02-17 14:19:18
【问题描述】:
我正在使用精灵中包含的 SVG 图标,如下所示。
<div class="py-3">
<svg-icon><src href="sprite.svg#si-glyph-bullet-checked-list"/></svg-icon>
<span>Tasks</span>
</div>
它工作正常,但是当我将它重写为 Angular 指令时:
app.directive('ngxTileIcon', function () {
return function (scope, element, attrs) {
var tileIcon = attrs['ngxTileIcon'];
var tileCaption = element.text();
element.text('');
element.addClass('py-3');
element.append(
$('<svg-icon/>').append(
$('<src/>').attr('href', 'sprite.svg#si-glyph-' + tileIcon)
),
$('<span/>').text(tileCaption)
);
};
});
并使用它:
<div ngx-tile-icon="bullet-checked-list">Tasks</div>
基本上,我得到了相同的标记,但谷歌浏览器没有显示 SVG 元素已添加到 DOM。当使用非 Angular 方法时,它确实如此。最后,使用Angular指令时,图标不显示。
已解决
我只是改变了方法——我没有将标记添加到元素,而是直接将其内容替换为html()。现在它按预期工作了。
app.directive('ngxTileIcon', function () {
return function (scope, element, attrs) {
var tileIcon = attrs['ngxTileIcon'];
var tileCaption = element.text();
var $tempDiv = $('<div/>');
element.addClass('py-3');
$tempDiv.append(
$('<svg-icon/>').append(
$('<src/>').attr('href', 'sprite.svg#si-glyph-' + tileIcon)
),
$('<span/>').text(tileCaption)
);
element.html($tempDiv.html());
};
});
【问题讨论】:
标签: javascript angularjs svg