首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ngTemplateOutlet阻止指令正确工作。

ngTemplateOutlet阻止指令正确工作。
EN

Stack Overflow用户
提问于 2017-10-05 18:39:45
回答 1查看 1.4K关注 0票数 1

我正在构建一个制表符组件,并在其标题中添加了一个附加类并执行动画的纹章组件,如下面的代码所示。

然而,尽管它在我的所有其他组件(即按钮)中都能工作,但当在ngTemplateOutlet上下文中使用时,它似乎无法工作。也许我做错了什么。任何小费都欢迎。

tabsComponentTemplate

代码语言:javascript
复制
<div class="nui-tab-group">
  <ng-template #defaultTabsHeader let-tabs="tabs">
    <ul class="nui-tab-group-buttons" *ngIf="tabs">
      <li class="tab-button"
          [ngClass]="{selected: tab.selected}"
          (click)="selectedTab(tab)"
          ripple-c
          *ngFor="let tab of tabs">{{ tab.title }}
      </li>
    </ul>
  </ng-template>

  <ng-container *ngTemplateOutlet="headerTemplate || defaultTabsHeader; context: tabsContext"></ng-container>

  <ng-content></ng-content>
</div>

波纹元件主部件

代码语言:javascript
复制
@HostListener('click', ['$event', '$event.currentTarget'])
  click(event, element) {
    if (this.rippleStyle === 'expand') {
      let ripple = document.createElement('span'),
        rect = element.getBoundingClientRect(),
        radius = Math.max(rect.height, rect.width),
        left = event.pageX - rect.left - radius / 2 - document.body.scrollLeft,
        top = event.pageY - rect.top - radius / 2 - document.body.scrollTop;

      ripple.className = 'expand-ripple-effect animate';
      ripple.style.width = ripple.style.height = radius + 'px';
      ripple.style.left = left + 'px';
      ripple.style.top = top + 'px';
      ripple.addEventListener('animationend', () => {
        element.removeChild(ripple);
      });
      element.appendChild(ripple);
    }
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-05 19:28:30

造成这种情况的主要原因是,每次发生更改检测时,您的列表都会被重新命名,因为每次都要将新对象传递给context

代码语言:javascript
复制
get tabsContext() {
  return {
    tabs: this.tabs
  }
}

NgTemplateOutlet指令可以看到这些更改,并清除模板ю。

使用准备好的数据作为模板

代码语言:javascript
复制
tabsContext: any;

ngAfterContentInit (): void {  
  ...  
  this.tabsContext = {
    tabs: this.tabs
  }
}

Stackblitz示例

另见类似案例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46592646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档