【问题标题】:Angular Element gets destroyed on mat-tab-group when new tab is added添加新选项卡时,Angular Element 在 mat-tab-group 上被破坏
【发布时间】:2019-10-19 21:35:33
【问题描述】:

我有一个从数组中填充的 mat-tab-group。我动态地将新项目添加到数组中,选项卡的内容是 Angular Elements 组件。

当我添加一个新元素时,一切正常,我看到添加了新元素,但我添加了一个新元素,前一个元素被破坏并且选项卡内容显示为空。

我在添加元素时检查了它,我发现它运行良好,但是当我添加一个新元素时,我可以看到前一个元素从 DOM 中消失了。

我尝试将常规文本而不是 Angular Elements 组件添加到选项卡中,一切都按预期工作,我可以在选项卡上前后移动。

标签组 HTML 是这样的:

<mat-tab-group [selectedIndex]="selectedTab">
  <mat-tab *ngFor="let tab of tabs; let i = index" [label]="tab.name">
    <div [innerHTML]="tab.content"></div>
  </mat-tab>
</mat-tab-group>

添加新标签的代码是这样的:

this.tabs.push({
  name: this.options[opt].name,
  content: this.domSanitizer.bypassSecurityTrustHtml('<osm-'+this.options[opt].content+'></osm-'+this.options[opt].content+'>')
} as MainTab);
this.selectedTab = this.tabs.length -1;

options 数组是可以添加的可能新选项卡的列表:

options = [
  {id: 1, name: 'Sell', content: 'sell'},
  {id: 2, name: 'Admin', content: 'admin'}
];

并且osm-sellosm-admin 组件已被创建为Angular Elements 组件(如this guide 中所述。

所有代码都在Github

预期的结果应该是第一步发生的情况,添加了一个新选项卡,其内容中包含该组件,但在添加新选项卡时它会被破坏。

https://tpv.osumi.es 正在进行实时测试

谢谢!!

【问题讨论】:

    标签: javascript angular typescript angular-material


    【解决方案1】:

    因为推送到数组会触发更改检测,并且您的选项卡没有被正确跟踪,所以框架会重新呈现它们。

    尝试按功能使用自定义跟踪:

    *ngFor="let tab of tabs; let i = index; trackBy: customTB"
    

    在你的 TS 中

    customTB(index, tab) {
      return tab.id;
    } 
    

    【讨论】:

    • 感谢您的快速响应,但仍然无法正常工作。我已经添加了您的代码和一些 console.logs,但它不起作用。将 console.log 放在 customTB 函数上会给我这个: 0 main.component.ts:40 {id: 1559661519258, name: "Venta", content: SafeHtmlImpl} 1 main.component.ts:40 {id: 1559661543015, name: "Admin", content: SafeHtmlImpl} 所以比较不起作用,它正在针对对象测试索引,不是吗?我已经更新了实时站点和 Github 存储库。再次感谢!
    • @IñigoGorosabel 就在我身上,我陷入了另一个类似的问题并发布了错误的签名。我已经编辑了我的答案,你现在可以测试一下吗?
    • 对不起,但仍然没有,完全相同的行为。我已经更新了实时站点和 Github 存储库。如果我不能让它工作,我会尝试动态组件注入,但我想让它工作。谢谢!
    • @IñigoGorosabel 你应该提供一个可以玩的沙箱。只是一个问题的例子而没有附带的代码是没有用的......
    • 嗨!抱歉我没能早点回答。我用这段代码做了一个 StackBlitz,它以同样的方式中断:stackblitz.com/edit/demo-osumi-tpv希望你能找到一些东西;)
    猜你喜欢
    • 2023-04-08
    • 2018-11-10
    • 2021-01-23
    • 2022-10-16
    • 1970-01-01
    • 2019-10-29
    • 2020-11-24
    • 1970-01-01
    • 2018-04-13
    相关资源
    最近更新 更多