我正在尝试从异步函数加载包含动态内容的 bootstrap 5 弹出窗口,但必须等待。我按如下方式设置弹出窗口:
document.querySelectorAll('[data-bs-toggle="popover"]').forEach(function (popover) {
new bootstrap.Popover(popover, {
content: function () {
(async () => {
var x = await SetPopoverContent();
return x;
})()
}
});
});
然后我返回数据库并在 SetPopoverContent() 中检索我的数据:
async function SetPopoverContent(popOver) {
let contentText = '';
let data = await dotNetReference.invokeMethodAsync('GetChatToInfo', messageId);
if (data != null && data != undefined) {
var outerDiv = '<div></div>';
...
contentText = outerDiv.innerHTML;
}
else {
contentText = '<p>Loading</p>';
}
return contentText;
}
我可以在弹出框内容函数中看到 html 字符串,但内容从未出现在弹出框中。我的异步回调方法是否出了问题?
它不适用于异步调用,您需要
.setContent
在弹出窗口实例上使用方法(或者,您可以在异步调用后创建弹出窗口,或者将内容设置为loading...
然后使用.setContent
)。因此,获取 popover 实例,然后运行异步方法,然后分配新内容:
演示:
参见设置内容的示例:Popovers - 方法 - setContent 示例
我认为这应该有效。