【发布时间】:2016-12-07 22:33:45
【问题描述】:
我正在创建一个使用 SVG 的 Web 应用程序。
我创建了由 SVG 元素组成的组件,并将它们放入根 svg 元素中。
他们有属性选择器,因为 SVG/XML 文档树很严格,所以我不能使用元素选择器。
他们有一个以svg:g标签开头的模板:
@Component({
selector:'[foo]',
template: '<svg:g>...</svg:g>',
})
在应用程序中,我想在用户按下按钮时创建一个组件, 并同时开始拖动它。 我认为可以通过使用ComponentResolver动态创建组件来实现:
@ViewChild('dynamicContentPlaceHolder', {read: ViewContainerRef})
protected dynamicComponentTarget: ViewContainerRef
private componentResolver: ComponentResolver
onMouseDown() {
this.componentResolver
.resolveComponent(FooComponent)
.then((factory) => {
const dynamicComponent = this.dynamicComponentTarget.createComponent(factory, 0)
const component: FooComponent = dynamicComponent.instance
const element = dynamicComponent.location.nativeElement
// add event listener to start dragging `element`.
})
}
组件是在调用onMouseDown()时创建的,但是它的DOM元素是div,所以是svg文档中的非法元素,无法显示。
我尝试使用selector='svg:g[foo]',然后创建g元素,但它的命名空间不是用于SVG(http://www.w3.org/2000/svg),而是普通的HTML命名空间(http://www.w3.org/1999/xhtml),它的类是HTMLUnknownElement > @ 987654334@.
我也尝试使用selector='svg:svg[foo]',然后创建svg:svg 元素并显示它。但是svg:svg 不能与transform 属性一起移动,所以这对我的应用程序不起作用。
如何为属性选择器组件动态创建svg:g 元素?
我正在使用 Angular2:2.0.0-rc4。
【问题讨论】:
-
谢谢,@GünterZöchbauer!这个问题和我想尝试的一样。感谢您的信息。我正在等待解决方案/错误修复。