@kanety/stimulus-static-actions
Version:
A stimulus extension to define actions in controller
117 lines (80 loc) • 2.58 kB
Markdown
# stimulus-static-actions
A stimulus extension to define actions in controller.
## Dependencies
* @hotwired/stimulus 3.0
## Installation
Install from npm:
$ npm install @kanety/stimulus-static-actions --save
## Usage
Import `@kanety/stimulus-static-actions`:
```javascript
import '@kanety/stimulus-static-actions';
```
Then define `actions` as static class properties in a controller:
```javascript
import { Controller } from '@hotwired/stimulus';
class TestController extends Controller {
static actions = [
['element', 'click->show']
];
show(e) {
// some codes here...
}
}
```
Actions are attached when the controller is connected.
They are also attached when target elements are added in the controller.
## Action definition
Action definition takes 3 arguments:
1. target element to attach actions
2. action description like `data-action` of stimulus
3. options
### Target element
Following kind of target elements could be specified:
* name of stimulus target
* `element` that is an element of stimulus controller
For example:
```javascript
class TestController extends Controller {
static targets = ['button'];
static actions = [
['button', 'click->show'], // specify name of stimulus target
['element', 'click->show'] // specify element of stimulus controller
];
```
### Action description
Action description is almost same as `data-action` of stimulus,
but identifier of controller is automatically recognized.
For example:
```javascript
class TestController extends Controller {
static targets = ['button'];
static actions = [
['button', 'show'], // equal to test#show
['button', 'click->show'], // equal to click->test#show
['button', ':custom->show'] // equal to test:custom->test#show
];
```
This controller attaches `data-action` attribute as follows:
```html
<div data-controller="test">
<button data-action="click->test#show test:custom->test#show"></button>
</div>
```
### Options
You can use `if` option for checking some conditions to attach actions.
This option takes a method or a getter of the controller.
For example:
```javascript
class TestController extends Controller {
static actions = [
['element', 'click->show', { if: 'isSpecificBrowser'}]
];
get isSpecificBrowser() {
return navigator.userAgent.match(/SpecificBrowser/);
}
}
```
In this example, the action is attached only if `userAgent` includes `SpecificBrowser`.
## License
The library is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).