Angular2 SVG xlink:href

tom*_*bak 38 angular2-template angular

我有用于渲染SVG图标的组件:

import {Component, Directive} from 'angular2/core';
import {COMMON_DIRECTIVES} from 'angular2/common';

@Component({
  selector: '[icon]',
  directives: [COMMON_DIRECTIVES],
  template: `<svg role="img" class="o-icon o-icon--large">
                <use [xlink:href]="iconHref"></use>
              </svg>{{ innerText }}`
})
export class Icon {
  iconHref: string = 'icons/icons.svg#menu-dashboard';
  innerText: string = 'Dashboard';
}
Run Code Online (Sandbox Code Playgroud)

这会触发错误:

EXCEPTION: Template parse errors:
  Can't bind to 'xlink:href' since it isn't a known native property ("<svg role="img" class="o-icon o-icon--large">
<use [ERROR ->][xlink:href]=iconHref></use>
  </svg>{{ innerText }}"): SvgIcon@1:21
Run Code Online (Sandbox Code Playgroud)

我该如何设置动态xlink:href

Gün*_*uer 68

SVG元素没有属性,因此大多数时候都需要属性绑定(另请参见HTML中的属性和属性).

对于属性绑定,您需要

<use [attr.xlink:href]="iconHref">
Run Code Online (Sandbox Code Playgroud)

要么

<use attr.xlink:href="{{iconHref}}">
Run Code Online (Sandbox Code Playgroud)

更新

消毒可能会导致问题.

也可以看看

更新 DomSanitizationServiceDomSanitizer在RC.6中重命名为

更新这个应该是固定的

但是有一个开放的问题来支持命名空间属性https://github.com/angular/angular/pull/6363/files

随着解决方案添加额外的

xlink:href=""
Run Code Online (Sandbox Code Playgroud)

Angular可以更新属性,但是有添加问题.

如果xlink:href实际上是一个属性,那么在添加PR之后你的语法也应该有效.

  • 谢谢!现在iconHref在DOM中呈现..仍然没有显示图标,因为我没有选择更改.这似乎需要公关才能发挥作用. (2认同)
  • 请注意,这也适用于图像标签。`&lt;image attr.xlink:href="http://somewhere.com/{{restOfUrl}}" /&gt;` (2认同)