Angular 第 3 方库 DOM 交互后的 2 元素娱乐 (VideoJS)
Angular 2 Element recreation after 3rd party lib DOM interaction (VideoJS)
当我想重新创建一些被 3Rd party lib 删除的 DOM 元素时,我应该走哪条路。例如,在 VideoJS dispose() 函数之后,原始 <video>
元素被删除。
我已经通过模板参考找到了这个解决方案,但是我无法在其内容被删除后重新创建出口模板。
<template #videotemp>
<video id="video" preload="auto">
<source [src]="rtmp" type="rtmp/mp4" />
<source [src]="dash" type="application/dash+xml" />
</video>
</template>
<template #video [ngTemplateOutlet]="videotemp"></template>
这是正确的方法吗?我如何从参考模板中重新创建元素?
好的,对于遇到同样问题的任何人来说。这是我的解决方案。
在阅读了大量的教程和讨论后,TemplateRef 和 ViewContainerRef 似乎是正确的方法。
通过另一个指令 stc 有不同的方法。我的解决方案是在同一个组件中制作的。
HTML 内部组件
<template #videoTemplate>
<video>
<source [src]="rtmp" type="rtmp/mp4" />
<source [src]="dash" type="application/dash+xml" />
</video>
</template>
<div #videoAnchor></div>
模板中的代码将在 div#videoAnchor
之后被克隆
在我的组件里面
export class SomeComponent {
@ViewChild('videoTemplate') videoTemplate: TemplateRef<Object>;
@ViewChild('videoAnchor', {read: ViewContainerRef}) videoAnchor:any;
...
constructor(
...
private viewContainer: ViewContainerRef,
private ref: ChangeDetectorRef
) {}
somefunction() {
this.videoAnchor.createEmbeddedView(this.videoTemplate);
this.ref.detectChanges();
}
}
我们只是将 ViecontainerRef 节点定义为克隆的 TemplateRef 对象的入口点。就是这样。我们需要使用 ChangeDetectorRef 让 Angular 知道我们已经改变了一些东西,否则它会抛出异常。
当我想重新创建一些被 3Rd party lib 删除的 DOM 元素时,我应该走哪条路。例如,在 VideoJS dispose() 函数之后,原始 <video>
元素被删除。
我已经通过模板参考找到了这个解决方案,但是我无法在其内容被删除后重新创建出口模板。
<template #videotemp>
<video id="video" preload="auto">
<source [src]="rtmp" type="rtmp/mp4" />
<source [src]="dash" type="application/dash+xml" />
</video>
</template>
<template #video [ngTemplateOutlet]="videotemp"></template>
这是正确的方法吗?我如何从参考模板中重新创建元素?
好的,对于遇到同样问题的任何人来说。这是我的解决方案。 在阅读了大量的教程和讨论后,TemplateRef 和 ViewContainerRef 似乎是正确的方法。
通过另一个指令 stc 有不同的方法。我的解决方案是在同一个组件中制作的。
HTML 内部组件
<template #videoTemplate>
<video>
<source [src]="rtmp" type="rtmp/mp4" />
<source [src]="dash" type="application/dash+xml" />
</video>
</template>
<div #videoAnchor></div>
模板中的代码将在 div#videoAnchor
之后被克隆在我的组件里面
export class SomeComponent {
@ViewChild('videoTemplate') videoTemplate: TemplateRef<Object>;
@ViewChild('videoAnchor', {read: ViewContainerRef}) videoAnchor:any;
...
constructor(
...
private viewContainer: ViewContainerRef,
private ref: ChangeDetectorRef
) {}
somefunction() {
this.videoAnchor.createEmbeddedView(this.videoTemplate);
this.ref.detectChanges();
}
}
我们只是将 ViecontainerRef 节点定义为克隆的 TemplateRef 对象的入口点。就是这样。我们需要使用 ChangeDetectorRef 让 Angular 知道我们已经改变了一些东西,否则它会抛出异常。