Stimulus использует концепцию значений контроллера для передачи данных из HTML в JavaScript. Значения позволяют декларативно связывать атрибуты DOM с переменными контроллера, а также обеспечивают автоматическое управление типами и возможность их валидации.
Каждый контроллер может объявлять значения через статическое свойство
values. Это объект, где ключ — имя значения, а значение —
его тип. Поддерживаются следующие встроенные типы:
StringNumberBooleanArrayObjectПример объявления значений:
import { Controller } from "@hotwired/stimulus";
export default class extends Controller {
static values = {
count: Number,
name: String,
active: Boolean,
items: Array,
config: Object
}
}
Для связывания значений используется синтаксис атрибутов
data-<имя-контроллера>-<имя-значения>-value.
Например:
<div
data-controller="example"
data-example-count-value="42"
data-example-name-value="Stimulus"
data-example-active-value="true"
data-example-items-value='["a","b","c"]'
data-example-config-value='{"theme":"dark"}'>
</div>
Stimulus автоматически конвертирует строки из HTML в соответствующие
типы значений. Если тип значения Number, строка
"42" будет преобразована в число 42; для
Boolean "true" или "false" — в
логическое значение; для Array и Object
используется парсинг JSON.
После объявления значений их можно использовать внутри контроллера
через свойства с суффиксом Value. Для каждого значения
автоматически создаются следующие свойства и методы:
<имя>Value — текущее значение<имя>ValueChanged — вызывается при изменении
значения<имя>Value с get и set
— возможность программно получить или установить значениеПример использования:
connect() {
console.log(this.countValue); // 42
console.log(this.activeValue); // true
this.nameValue = "Updated";
}
Stimulus выполняет автоматическую валидацию значений при инициализации. Если значение не соответствует объявленному типу, выбрасывается ошибка:
data-example-count-value="not-a-number"
В этом случае при подключении контроллера будет ошибка:
Uncaught TypeError: `not-a-number` is not a valid Number value
Для сложных сценариев можно использовать кастомные методы
проверки внутри контроллера через connect или
valueChanged:
countValueChanged(newValue, oldValue) {
if (newValue < 0) {
console.warn("countValue не может быть отрицательным");
this.countValue = 0;
}
}
Значения можно менять не только через свойства контроллера, но и
через DOM. Stimulus отслеживает изменения атрибутов
data-*-value и автоматически обновляет свойства:
document.querySelector('[data-controller="example"]').dataset.exampleCountValue = "100";
После этого сработает соответствующий метод
countValueChanged с новым значением 100.
Хотя Stimulus предоставляет стандартные типы, можно создавать собственные методы парсинга, если требуется поддержка специфических форматов данных. Для этого обычно используют вспомогательные функции при установке значения:
set dateValue(val) {
this._dateValue = new Date(val);
}
get dateValue() {
return this._dateValue;
}
<имя>ValueChanged для
валидации и реакции на изменения.Stimulus обеспечивает декларативное связывание данных и строгую типизацию без дополнительной библиотеки, что позволяет создавать предсказуемые и надежные интерактивные интерфейсы.