component/slot/inject

The @component tag allows you to use an Edge template as a component.

  • It is a block level tag
  • It accepts the template path relative from the views directory, along with the component state as the second argument.
@!component('components/button', {
title: 'Hello world'
})

You can also derive the component name from a runtime value.

@!component(currentTheme.button, {
title: 'Hello world'
})

slot

The @slot tag allows you define the markup for the named slots. It accepts the slot name as the first argument and can also receive additional arguments from the component template.

@slot('main')
This is the content for the main slot
@end

If the component passes any additional arguments to the slot, then you can access them as follows:

@slot('main', scope)
{{ scope.title }}
@end

Since slots are regular functions, the component calls the function and passes it the arguments.

{{{ await $slots.main({ title: 'Hello world' }) }}}

inject

The @inject tag allows the component template to inject data into the component tree. The tag accepts an object as the only argument.

@inject({ tabs: [] })