Angular使用ngTemplateOutlet实现自定义select下拉选项消失问题
Angular自定义Select下拉组件开发问题
预期组件调用方式
我正在开发一款可供其他开发者便捷调用的自定义select下拉组件,希望组件调用足够简洁,不需要额外嵌套冗余节点,预期调用示例如下:
<ui-select placeholder="select an option" label="Select"> <ui-select-option *ngFor="let option of options" [id]="option"> <!-- 选项位置支持传入任意自定义展示内容 --> </ui-select-option> </ui-select>
当前实现与存在的问题
目前我采用@ContentChildren搭配ngTemplateOutlet的方案实现内容投影:将每个传入的选项投影到下拉选项列表中,每个选项会被统一包裹在列表项容器内,方便集中处理点击事件、选中态CSS样式等通用交互逻辑。
目前基础功能运行正常,但存在一个异常:
实现「选中选项后,将选中项的模板内容填充到顶部选择输入框区域」的逻辑后,被选中的选项会从下拉列表中莫名消失。
备选方案的不足
我曾找到一种基于结构型指令的可行实现方案,但最终不打算采用:
受Angular单个组件节点仅能挂载一个结构型指令的限制,用该方案循环渲染选项时,必须额外添加ng-container节点承载*ngFor循环逻辑,最终组件调用形式会多出一层无意义的嵌套,和我预期的简洁调用形式不符,冗余写法示例如下:
<ui-select placeholder="select an option" label="Select"> <ng-container *ngFor="let option of options"> <ui-select-option *myValue="option"> <!-- 选项位置支持传入任意自定义展示内容 --> </ui-select-option> </ng-container> </ui-select>
问题进展
我已就该问题直接向Angular团队反馈,目前官方已经对问题成因给出了清晰解释。
内容的提问来源于stack exchange,提问作者Alex R
相关产品推荐
相关产品推荐

