我不知道你的数据,但想象一下我们有这样的文本
text="[=Lorem=] ipsum dolor sit amet, consectetur adipiscing elit, sed do [=eiusmod=]
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure dolor in reprehenderit in [=voluptate=] velit
esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est [=laborum.=]"
并在数组中定义了一系列popover,如
popover=[{text:"tooltip1",title:"title 1"},
{text:"tooltip2",title:"title 2"},
{text:"tooltip3",title:"title 3"},
{text:"tooltip4",title:"title 4"}]
这个想法是生成一个具有 text、word 和 popover 属性的对象数组
const part=this.text.split("[=");
let count:number=0
part.forEach((x,index)=>{
let f=x.indexOf("=]")
if (f>=0)
{
this.data.push({
text:part[index-1],
word:part[index].substr(0,f),
popover:this.popover[count]
})
part[index]=part[index].substr(f+2)
count++
}
})
this.data.push({
text:part[part.length-1]
})
}
然后,我们可以在 .html 中使用这些数据
<div class="container">
<div style="display:inline" *ngFor="let d of data">{{d.text}}
<button *ngIf="d.popover" type="button" class="btn btn-link"
[ngbPopover]="d.popover.text"
[popoverTitle]="d.popover.title">
{{d.word}}
</button>
</div>
</div>
你可以在stackblitz看到结果
更新如果我们的文本有html标签就会出现问题,因为“divs”破坏了html标签,对不起