Alpine.js: Looping

If you store some x-data variable as an array, you can loop through it and render a template multiple times using x-for, like this:

<ul x-data="shop">
  <template x-for='(item, index) in cart'>
    <li>
      <p x-text='item.title'></p>
      <p x-text='formatAsPrice(item.price)'></p>
      <button @click=`removeFromCart(index)`>
        Remove
      </button>
    </li>
  </template>
</ul>

The caveat is that x-for must be put on a <template> tag, and this must have a single child element (for example, wrap all tags in a div if you have more).

The <template> tag is a special tag used to hold content that’s not rendered immediately on the page, but rendered using JavaScript (see MDN).

Lessons in this unit:

0: Introduction
1: Installing Alpine
2: The basics of Alpine
3: Events
4: Defining data
5: ▶︎ Looping
6: Binding user input to variables
7: Watching variables change
8: Stores