AdonisJS v6 is here. Learn more in our release blog post.

Loops

You can loop over objects and arrays using the @each tag. It works similar to the for of loop in JavaScript.

view.render('users', {
users: [
{
username: 'virk',
},
{
username: 'romain',
},
{
username: 'nikk',
},
]
})
@each(user in users)
<li> {{ user.username }} </li>
@end

You can access the loop index as shown in the following example

@each((user, index) in users)
<li> {{ index + 1 }} {{ user.username }} </li>
@end

Similarly you can also loop over an object and access its key and value.

view.render('recipes', {
food: {
ketchup: '5 tbsp',
mustard: '1 tbsp',
pickle: '0 tbsp'
}
})
@each((amount, ingredient) in food)
<li> Use {{ amount }} of {{ ingredient }} </li>
@end

The @each tag works just fine with async code inside it. Here's an example of the same.

view.render('users', {
users: [
{
username: 'virk',
posts: async () => [{ title: 'Adonis 101' }],
},
{
username: 'romain',
posts: async () => [{ title: 'Flydrive 101' }],
}
]
})
@each(user in users)
<h2> {{ user.username }} posts </h2>
@each(post in await user.posts())
<p> {{ post.title }} </p>
@end
@end