¿Por qué timeAgo está devolviendo null?
Estoy tratando de obtener el tiempo de actualización de manera iterativa cada vez que se abre el menú desplegable, pero me está devolviendo null
. ¿Cómo puedo asegurarme de que el evento onchange
se active correctamente?
Esto es lo que he intentado hasta ahora:
<x-nav-dropdown :text="$notificationIcon" :title="text('nav<em>notifications')" dropdownClass="notifications-dropdown" align="right">
@forelse(Auth::user()->notifications as $notification)
<x-dropdown-item :route="$notification->data['link']" :title="text($notification->data['link</em>title'])" onchange="getTime()" x-data="{timeAgo : 'null', getTime() {this.timeAgo = moment('{{ $notification->created<em>at->format('c') }}').locale('{{ str</em>replace('<em>', '-', cur</em>lang()->slug) }}').fromNow();} }" >
<span style="display: inline-block;">{{ text($notification->data['subject']) }}</span>
<time style="float: right;" x-text= timeAgo> </time>
<pre><code></span>
<br/>
<small>{{ array_key_exists('data', $notification->data) && !empty($notification->data['data']) ? new \Illuminate\Support\HtmlString(vsprintf(text($notification->data['message']), $notification->data['data'])) : text($notification->data['message']) }}</small>
</code></pre>
</x-dropdown-item>
@empty
<x-dropdown-item route="#" :title="text('notifications<em>none')">
{{ text('notifications</em>none') }}
</x-dropdown-item>
@endforelse
</x-nav-dropdown>
Por ejemplo, el resultado deseado debería ser:
"x" minutos atrás
¿Lo estoy haciendo bien? ¿Puedo llamar al evento onchange
en las etiquetas de Bootstrap? ¿Algún tipo de ayuda en la dirección correcta?
¡Gracias de antemano!
davy.ai
Para asegurarse de que se active correctamente el evento
onchange
, es necesario asegurarse de que el elemento desplegable tenga una propiedad o atributoonchange
válido. En el fragmento de código proporcionado, parece que el atributoonchange
está configurado para ejecutar la funcióngetTime()
, pero no está claro dónde se define esta función.Para obtener la hora actualizada de forma iterativa cada vez que se abre el desplegable, puedes utilizar el evento
@shown.bs.dropdown
proporcionado por el plugin de desplegables de Bootstrap. Este evento se dispara cuando el desplegable está completamente abierto (después de que las transiciones CSS hayan finalizado). Puedes agregar un “event listener” a este evento y llamar a la funcióngetTime()
dentro de él para actualizar la hora que se muestra.Así es cómo puedes modificar el código para lograr esto:
En este código modificado, se agregó el atributo
x-init
al elementox-dropdown-item
para llamar a la funcióngetTime()
cuando el elemento se inicializa. También se agregó un “event listener” al evento@shown.bs.dropdown
utilizando la directiva abreviada@
para llamar a la funcióngetTime()
nuevamente cada vez que el desplegable está completamente abierto.También se movió el atributo
x-data
al elementox-dropdown-item
para encapsular las propiedadestimeAgo
ygetTime()
y la función dentro del ámbito del elemento. De esta manera, podemos actualizar directamente la propiedadtimeAgo
desde la funcióngetTime()
.Ten en cuenta que también se eliminó el atributo
onchange
ya que no es necesario para esta funcionalidad.