Estou tentando carregar um popover bootstrap 5 com conteúdo dinâmico de uma função assíncrona na qual tenho que esperar. Estou configurando meu popover assim:
document.querySelectorAll('[data-bs-toggle="popover"]').forEach(function (popover) {
new bootstrap.Popover(popover, {
content: function () {
(async () => {
var x = await SetPopoverContent();
return x;
})()
}
});
});
Em seguida, volto ao banco de dados e recupero meus dados dentro de 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;
}
Posso ver minha string html dentro da minha função de conteúdo popover, mas o conteúdo nunca aparece no popover. Estou fazendo algo errado com o método de retorno de chamada assíncrono?
Não funcionará com chamadas assíncronas, você precisa usar
.setContent
o método na instância do popover ( alternativamente, você pode criar um popover após uma chamada assíncrona ou definir o conteúdoloading...
e então usar.setContent
).Então, obtenha uma instância do popover, execute seu método assíncrono e atribua um novo conteúdo:
demonstração:
veja exemplo para configuração de conteúdo: Popovers - Métodos - exemplo setContent
Acho que isso deve funcionar.