Trigger a Stimulus.js action with a window event
Stimulus.js controllers are great! However, sometimes you need to trigger them in different ways. Usually, you're looking at an event on an element.
<textarea
name="embed_html"
data-action: "input->textarea-autogrow#autogrow"
controller: "textarea-autogrow"></textarea>
Now, this is a trivial example as the Textarea-Autogrow controller is already monitoring the element without the need for the explicit data-action
above.
In my case, I'm also using this text area within a tab powered by another controller from the Tailwind Stimulus Components library called Tabs. Due to the tab hiding my text area at the time of rendering, it doesn't calculate the height of the content inside. I'll need to trigger this manually. Luckily, the Tab controller emits a tsc:tab-change
event on the window
.
Now, I can utilize this on my textarea
with the @window
syntax.
<textarea
name="embed_html"
data-action: "tsc:tab-change@window->textarea-autogrow#autogrow input->textarea-autogrow#autogrow"
controller: "textarea-autogrow"></textarea>
This way, we trigger the autogrow
function with each element's input and when we change tabs.
Check out the Global Events documentation for more info.
Tweet