私はSVGを使用するWebアプリケーションを作成しています。 SVG要素で構成されたコンポーネントを作成し、ルートsvg
要素に入れます。 SVG/XML文書ツリーは厳格なので、要素セレクタは使用できません。 そして、彼らはテンプレートを持っているがsvg:g
タグで始まります。アプリケーションでAngular2でSVGコンポーネントを動的に作成する方法は?
@Component({
selector:'[foo]',
template: '<svg:g>...</svg:g>',
})
、私は、コンポーネントのユーザー押しボタンを作成 と同時に、それをドラッグを開始します。 onMouseDown()
が呼び出されたときに
@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`.
})
}
コンポーネントが作成されますが、それはSVG文書では違法要素であると表示することはできませんので、そのDOM要素は、div
です: は、私はそれを動的ComponentResolverを使用してコンポーネントを作成することによって達成することができると思いました。
私はその後g
要素が作成され、selector='svg:g[foo]'
で試してみましたが、その名前空間は、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