我正在創建一個使用SVG的Web應用程序。 我創建了包含SVG元素的組件,並將它們放入根元素svg
中。 他們有屬性選擇器,因爲SVG/XML文檔樹是嚴格的,所以我不能使用元素選擇器。 他們有一個模板,svg:g
標記開頭:如何在Angular2中動態創建SVG組件?
@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
>g
。
我也試過用selector='svg:svg[foo]'
,然後svg:svg
元素被創建並顯示出來。但svg:svg
不能與transform
屬性一起移動,所以這對我的應用程序不起作用。
如何爲屬性選擇器組件動態創建svg:g
元素?
我正在使用Angular2:2.0.0-rc4。
聽起來像https:// github。com/angular/angular/issues/10404 –
謝謝,@GünterZöchbauer!這個問題與我想嘗試的相同。感謝您的信息。我正在等待解決方案/錯誤修復。 – tyfkda