我有渲染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';
- }
这会触发错误:
- 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
如何设置动态xlink:href?
SVG元素没有属性,因此大多数时间都需要属性绑定(另见
Properties and Attributes in HTML).
对于属性绑定,您需要
- <use [attr.xlink:href]="iconHref">
要么
- <use attr.xlink:href="{{iconHref}}">
更新
消毒可能会导致问题.
也可以看看
> https://github.com/angular/angular/issues/9510)
> https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizationService-class.html
更新DomSanitizationService将在RC.6中重命名为DomSanitizer
更新这个应该是固定的
但是有一个开放的问题来支持命名空间属性https://github.com/angular/angular/pull/6363/files
- xlink:href=""