Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular2:克隆组件/HTML元素及其';s功能_Javascript_Angular_Angular2 Directives - Fatal编程技术网

Javascript Angular2:克隆组件/HTML元素及其';s功能

Javascript Angular2:克隆组件/HTML元素及其';s功能,javascript,angular,angular2-directives,Javascript,Angular,Angular2 Directives,所以,问题很简单 我有一张桌子和一些角度逻辑(计算风格等)。。。具体来说,我有这个 [class.hidden] = "column.group !== 'key-data' && currentTableView !== column.group" 对于我的表粘性标题功能,我需要克隆表并将其定位到固定位置。。使用一个指令,这样做(简化) 显然,角度逻辑不适用于newTable,但我希望它是 我该怎么做呢?所以我做了一些研究,这就是我想到的 您可以做到这一点,使用模板和[ngT

所以,问题很简单

我有一张桌子和一些角度逻辑(计算风格等)。。。具体来说,我有这个

[class.hidden] = "column.group !== 'key-data' && currentTableView !== column.group"
对于我的表粘性标题功能,我需要克隆表并将其定位到固定位置。。使用一个指令,这样做(简化)

显然,角度逻辑不适用于newTable,但我希望它是


我该怎么做呢?

所以我做了一些研究,这就是我想到的

您可以做到这一点,使用模板和
[ngTemplateOutlet]
实际上并不难。这就是它的工作原理:

@Component({
  selector: 'my-app',
  template: `
    <ng-template #temp>
        <h1 [ngStyle]="{background: 'green'}">Test</h1>
        <p *ngIf="bla">Im not visible</p>   
    </ng-template>
    <ng-container *ngTemplateOutlet="temp"></ng-container>
    <ng-container *ngTemplateOutlet="temp"></ng-container>
    `
})

export class AppComponent {
    bla: boolean = false;
    @ContentChild('temp') testEl: any;
} 
@组件({
选择器:“我的应用程序”,
模板:`
试验
即时消息不可见
`
})
导出类AppComponent{
bla:boolean=false;
@ContentChild(“临时”)测试仪:任何;
} 
因此,您可以创建一个引用模板,在其中添加所有逻辑,然后使用
[ngTemplateOutlet]
创建尽可能多的模板副本。保留所有内部绑定和角度功能

这是一个正在工作的plunker:

正如您所看到的,我已经用
*ngIf
[ngStyle]
对它进行了测试,它们按预期工作,我看不出任何其他类型的指令不起作用的原因

您甚至可以使用
*ngFor
,但是您需要提供
[ngOutletContext]
。 我在一个正在开发的库中完成了这项工作,您可以在这里看到一个示例:


为什么不使用相同的数据创建一个新实例?我不认为有办法用这种方式克隆它。新实例+存储/获取属性(通过服务或在最坏的情况下从本地存储…)不用于获取数据。。。。用于切换可见列和隐藏列。有一些ngClass的角度逻辑放在。。。我想在克隆的THsLooks上保留相同的逻辑很好。。。我想给你奖金,但还没有检查/测试它,如果这是我要找的。。。它看起来很接近。我已经成功地使用过几次了,我希望它也能为您工作。错误类型错误:templateRef.createEmbeddedView不是一个函数,谢谢@VictorCredihin。从编写时起,实现发生了更改。我已经更新了我的答案,使之与当前版本的angular保持一致。
@Component({
  selector: 'my-app',
  template: `
    <ng-template #temp>
        <h1 [ngStyle]="{background: 'green'}">Test</h1>
        <p *ngIf="bla">Im not visible</p>   
    </ng-template>
    <ng-container *ngTemplateOutlet="temp"></ng-container>
    <ng-container *ngTemplateOutlet="temp"></ng-container>
    `
})

export class AppComponent {
    bla: boolean = false;
    @ContentChild('temp') testEl: any;
}