Skip to main content English Español Claro Oscuro Sistema

Observadores

.

Observador de mutaciones

El observador de mutaciones informará de los cambios al contenido que envuelve a través del evento gstock-mutation-event.

Cuando se emite, se adjuntará una colección de objetos MutationRecord a event.detail que contiene información sobre la mutación.

Brand
Haz clic en el botón y mira la consola
<gstock-mutation-observer attr="color">
  <gstock-button>Brand</gstock-button>
</gstock-mutation-observer>

<br>

Haz clic en el botón y mira la consola

<script type="module">
  const mutationObserver = document.querySelector('gstock-mutation-observer');
  const button = document.querySelector('gstock-button');
  const colors = ['brand', 'neutral', 'information', 'success', 'warning', 'danger'];
  let clicks = 0;

  // Change the button's color attribute
  button.addEventListener('click', () => {
    clicks++;
    const color = colors[clicks % colors.length];
    const colorWithCapital = color.charAt(0).toUpperCase() + color.slice(1);
    button.setAttribute('color', color);
    button.textContent = colorWithCapital;
  });

  // Log mutations
  mutationObserver.addEventListener('gstock-mutation-event', event => {
    console.log(event.detail);
  });
</script>

<style>
  gstock-button {
    margin-bottom: 1rem;
  }
</style>

Cuando se crea un observador de mutaciones, se debe indicar a qué cambios debe responder incluyendo al menos uno de los atributos attr, child-list o char-data. Si no especifica al menos uno de estos atributos, no se emitirá ningún evento de mutación.

Lista de elementos secundarios

Utilice el atributo child-list para detectar nuevos elementos secundarios que se agregan o eliminan.

Add button
Agrega y quita botones y observa la consola
<gstock-mutation-observer child-list>
  <div class="buttons">
    <gstock-button>Add button</gstock-button>
  </div>
</gstock-mutation-observer>

Agrega y quita botones y observa la consola

<script type="module">
  const mutationObserver = document.querySelector('gstock-mutation-observer');
  const buttons = document.querySelector('.buttons');
  const button = document.querySelector('gstock-button');
  let i = 0;

  // Add a button
  button.addEventListener('click', () => {
    const button = document.createElement('gstock-button');
    button.textContent = ++i;
    button.color = 'neutral';
    buttons.append(button);
  });

  // Remove a button
  buttons.addEventListener('click', event => {
    const target = event.target.closest('gstock-button[color="neutral"]');
    event.stopPropagation();

    if (target) {
      target.remove();
    }
  });

  // Log mutations
  mutationObserver.addEventListener('gstock-mutation-event', event => {
    console.log(event.detail);
  });
</script>

<style>
  .buttons {
    display: flex;
    gap: 0.25rem;
    flex-wrap: wrap;
    margin-bottom: 1rem;
  }
</style>