- Контроллеры
- Хуки жизненного цикла
- Действия (Actions)
- Объекты (Targets)
- Переменные контроллера (Values)
- CSS классы
Вы можете читать и записывать атрибуты данных HTML на элементах контроллера как типизированные переменные, используя специальные свойства контроллера.
<div data-controller="loader"
data-loader-url-value="/messages">
</div>
// controllers/loader_controller.js
import { Controller } from '@hotwired/stimulus';
export default class extends Controller {
static values = {
url: String;
}
connect() {
fetch(this.urlValue).then(/* … */);
}
}
Определите переменные в контроллере с помощью объекта static values
. Поместите имя каждой переменной слева, а её тип – справа.
export default class extends Controller {
static values = {
url: String,
interval: Number,
params: Object,
}
// …
}
Тип переменной – это один из стандартных типов javascript Array
, Boolean
, Number
, Object
или String
. Тип определяет, как значение переменной перекодируется между JavaScript и HTML.
Тип | Кодируется как… | Декодируется как… |
---|---|---|
Array | JSON.stringify(array) |
JSON.parse(value) |
Boolean | boolean.toString() |
value != "0" && value != 'false' |
Number | number.toString() |
Number(value) |
Object | JSON.stringify(object) |
JSON.parse(value) |
String | – | – |
Stimulus автоматически генерирует свойства getter, setter и existential для каждой переменной, определенной в контроллере. Эти свойства связаны с атрибутами данных в элементе контроллера:
Тип | Имя свойства | Эффект |
---|---|---|
Getter | this.[name]Value |
Читает атрибут data-[identifier]-[name]-value |
Setter | this.[name]Value= |
Пишет в атрибут data-[identifier]-[name]-value |
Existential | this.has[Name]Value |
Проверяет наличие атрибута data-[identifier]-[name]-value |
Геттер для переменной декодирует связанный атрибут данных в экземпляр типа этой переменной.
Если атрибут данных отсутствует в элементе контроллера, геттер возвращает значение по умолчанию, в зависимости от типа переменной:
Тип переменой | Значение по умолчанию |
---|---|
Array | [] |
Boolean | false |
Number | 0 |
Object | {} |
String | '' |
Сеттер переменной устанавливает связанный с ней атрибут данных на элементе контроллера.
Чтобы удалить атрибут данных из элемента контроллера, присвойте ему значение undefined
.
Existential-свойство для переменной оценивается как true
, если связанный атрибут данных присутствует на элементе контроллера, и false
, если он отсутствует.
Хуки изменения значения переменной позволяют вам реагировать на изменение атрибута данных.
Определите метод [name]ValueChanged
в контроллере, где [name]
- это имя переменной, за изменением которой вы хотите наблюдать. Метод получает декодированное значение в качестве первого аргумента и декодированное предыдущее значение в качестве второго аргумента.
Stimulus вызывает каждый хук изменения после инициализации контроллера и каждый раз, когда связанный с ним атрибут данных изменяется. Это включает в себя изменения в результате присвоения сеттеру переменной какого-либо значения.
export default class extends Controller {
static values = { url: String }
urlValueChanged() {
fetch(this.urlValue).then(/* … */);
}
}
Вы можете получить доступ к предыдущему значению в хуке [name]ValueChanged
, определив метод хука с двумя аргументами.
export default class extends Controller {
static values = { url: String }
urlValueChanged(value, previousValue) {
/* … */
}
}
Оба аргумента могут быть названы как угодно. Вы также можете использовать urlValueChanged(current, old)
.
Переменные, которые не были указаны на элементе контроллера, могут быть установлены значениями по умолчанию, указанными в определении контроллера:
export default class extends Controller {
static values = {
url: { type: String, default: '/bill' },
interval: { type: Number, default: 5 },
clicked: Boolean,
}
}
Когда требуется значение по умолчанию, используется расширенная форма описания { type, default }
. Эту форму можно смешивать с обычной формой, которой не требуется значение по умолчанию.
Записывайте имена значений в camelCase в JavaScript и kebab-case в HTML. Например, значение с именем contentType
в контроллере loader
будет иметь связанный с ним атрибут данных data-loader-content-type-value
.
- Контроллеры
- Хуки жизненного цикла
- Действия (Actions)
- Объекты (Targets)
- Переменные контроллера (Values)
- CSS классы