- Контроллеры
- Хуки жизненного цикла
- Действия (Actions)
- Объекты (Targets)
- Переменные контроллера (Values)
- CSS классы
Специальные методы, называемые хуками жизненного цикла, позволяют вам реагировать каждый раз, когда контроллер или определенные объекты подключаются к документу и отсоединяются от него.
import { Controller } from '@hotwired/stimulus';
export default class extends Controller {
connect() {
// …
}
}
Вы можете определить любой из следующих методов в своем контроллере:
Метод | Вызывается Stimulus… |
---|---|
initialize() |
Один раз, при первом инстанцировании контроллера |
[name]TargetConnected(target: Element) |
Каждый раз, когда объект подключается к DOM |
connect() |
Каждый раз, когда контроллер подключается к DOM |
[name]TargetDisconnected(target: Element) |
Каждый раз, когда объект отсоединяется от DOM |
disconnect() |
Каждый раз, когда контроллер отсоединяется от DOM |
Контроллер подключен к документу, когда верны оба следующих условия:
- его элемент присутствует в документе (т.е. является потомком
document.documentElement
, элемента<html>
) - его идентификатор присутствует в атрибуте
data-controller
элемента
Когда контроллер становится подключенным, Stimulus вызывает его метод connect()
.
Объект подключен к документу, если верны оба следующих условия:
- его элемент присутствует в документе как потомок соответствующего элемента контроллера
- его идентификатор присутствует в атрибуте
data-{identifier}-target
элемента
Когда объект становится подключенным, Stimulus вызывает метод [name]TargetConnected()
своего контроллера, передавая целевой элемент в качестве параметра. Хуки жизненного цикла [name]TargetConnected()
срабатывают до хука контроллера connect()
.
Подключенный контроллер впоследствии станет отключенным, когда одно из предыдущих условий станет ложным, например, при любом из следующих сценариев:
- элемент явно удален из документа с помощью
Node#removeChild()
илиChildNode#remove()
. - один из родительских элементов элемента удален из документа
- у одного из родительских элементов элемента его содержимое заменено с помощью
Element#innerHTML=
- атрибут
data-controller
элемента удален или изменен - документ устанавливает новый элемент
<body>
, например, при изменении страницы Turbo
Когда контроллер становится отключенным, Stimulus вызывает его метод disconnect()
.
Подключенный объект впоследствии станет отключенный, когда одно из предыдущих условий станет ложным, например, при любом из следующих сценариев:
- элемент явно удален из документа с помощью
Node#removeChild()
илиChildNode#remove()
. - один из родительских элементов элемента удален из документа
- у одного из родительских элементов элемента его содержимое заменено с помощью
Element#innerHTML=
- атрибут
data-{identifier}-target
элемента удален или изменен - документ устанавливает новый элемент
<body>
, например, при изменении страницы Turbo
Когда объект становится отключенным, Stimulus вызывает метод [name]TargetDisconnected()
своего контроллера, передавая целевой элемент в качестве параметра. Хуки жизненного цикла [имя]TargetDisconnected()
срабатывают до хука контроллера disconnect()
.
Отключенный контроллер может быть снова подключен позднее.
Когда это происходит, например, после удаления элемента контроллера из документа, а затем его повторного подключения, Stimulus повторно использует предыдущий экземпляр контроллера элемента, вызывая его метод connect()
несколько раз.
Аналогично, отключенный объект может быть подключен снова в более позднее время. Stimulus вызовет метод [name]TargetConnected()
своего контроллера несколько раз.
Stimulus следит за изменениями на странице асинхронно, используя DOM MutationObserver API.
Это означает, что Stimulus вызывает методы жизненного цикла вашего контроллера асинхронно после внесения изменений в документ, в следующей microtask после каждого изменения.
Методы жизненного цикла по-прежнему выполняются в порядке их появления, поэтому два вызова метода контроллера connect()
всегда будут разделены одним вызовом disconnect()
. Аналогично, два вызова метода контроллера [name]TargetConnected()
для данного объекта всегда будут разделены одним вызовом [name]TargetDisconnected()
для того же объекта.
- Контроллеры
- Хуки жизненного цикла
- Действия (Actions)
- Объекты (Targets)
- Переменные контроллера (Values)
- CSS классы