You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular16中Taiga UI Select报错,缺失TuiPortalHostComponent求助

问题:Taiga UI Select组件打开时提示“Portals cannot be used without TuiPortalHostComponent”错误

错误信息

ERROR Error: Portals cannot be used without TuiPortalHostComponent
    at get safeHost (taiga-ui-cdk-abstract.js:390:19)
    at TuiDropdownPortalService.add (taiga-ui-cdk-abstract.js:398:21)
    at TuiDropdownDirective.toggle (taiga-ui-core-directives-dropdown.js:109:56)
    at Object.next (taiga-ui-core-abstract.js:41:71)
    at ConsumerObserver.next (Subscriber.js:91:33)
    at SafeSubscriber._next (Subscriber.js:60:26)
    at SafeSubscriber.next (Subscriber.js:31:18)
    at distinctUntilChanged.js:14:28
    at OperatorSubscriber._next (OperatorSubscriber.js:13:21)
    at OperatorSubscriber.next (Subscriber.js:31:18)

环境配置

项目依赖

"dependencies": {
    "@angular/animations": "^16.2.0",
    "@angular/cdk": "^16.0.0",
    "@angular/common": "^16.2.0",
    "@angular/compiler": "^16.2.0",
    "@angular/core": "^16.2.0",
    "@angular/forms": "^16.2.0",
    "@angular/platform-browser": "^16.2.0",
    "@angular/platform-browser-dynamic": "^16.2.0",
    "@angular/router": "^16.2.0",
    "@taiga-ui/cdk": "^3.87.0",
    "@taiga-ui/core": "^3.87.0",
    "@taiga-ui/icons": "^3.87.0",
    "@taiga-ui/kit": "^3.87.0",
    "@taiga-ui/styles": "^3.87.0",
    "@tinkoff/ng-dompurify": "^4.0.0",
    "rxjs": "~7.8.0",
    "taiga-ui": "^3.87.0",
    "tslib": "^2.3.0",
    "zone.js": "~0.13.0"
 }

AppModule配置

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    FormsModule,
    ReactiveFormsModule,
    BrowserModule,
    AppRoutingModule,
    BrowserAnimationsModule,
    TuiRootModule,
    TuiDialogModule,
    TuiAlertModule,
    TuiSelectModule,
    TuiDataListWrapperModule
  ],
  providers: [{provide: TUI_SANITIZER, useClass: NgDompurifySanitizer}],
  bootstrap: [AppComponent]
})
export class AppModule { }

Select组件模板

<form [formGroup]="testForm">
  <tui-select formControlName="testValue">
    <tui-data-list-wrapper
      *tuiDataList
      [items]="items"
    ></tui-data-list-wrapper>
  </tui-select>
</form>

组件代码

export class AppComponent {
  testForm = new FormGroup({
    testValue: new FormControl(),
  });

  items = ['1', '2'];
}

问题原因

虽然在AppModule中导入了TuiRootModule,但根组件(AppComponent)的模板里没有添加<tui-root>标签。Taiga UI的下拉弹窗这类依赖Portal的组件,需要<tui-root>作为Portal的宿主容器来渲染弹出内容,缺少这个标签会导致找不到Portal宿主,从而抛出错误。

解决方案

修改AppComponent的模板,将所有内容包裹在<tui-root>标签内:

<tui-root>
  <form [formGroup]="testForm">
    <tui-select formControlName="testValue">
      <tui-data-list-wrapper
        *tuiDataList
        [items]="items"
      ></tui-data-list-wrapper>
    </tui-select>
  </form>
</tui-root>

内容的提问来源于stack exchange,提问作者Евгений Щемелинин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:14:52