HM-31. Добавлен роутинг для страниц (#9)
This commit is contained in:
@ -1,21 +1,17 @@
|
||||
import EmitService from '../../services/EmitService';
|
||||
|
||||
/**
|
||||
* Класс для создания компонентов приложения. Необходим для наследования.
|
||||
* @param {string} mainNodeSelector - селектор, с помощью которого извлекается шаблон компонента
|
||||
* @param {Node} parentNode - родительский Node, в который следует положить созданный элемент
|
||||
*/
|
||||
class Component {
|
||||
class Component extends EmitService {
|
||||
/**
|
||||
* Список слушателей компонента
|
||||
* @type {{element: Node, eventName: string, listener: Function}[]}
|
||||
*/
|
||||
_listeners;
|
||||
|
||||
/**
|
||||
* События компонента
|
||||
* @type {Object<string, Function[]>}
|
||||
*/
|
||||
_events;
|
||||
|
||||
/**
|
||||
* Корневой элемент компонента
|
||||
* @type {Node} - корневой элемент компонента
|
||||
@ -23,6 +19,7 @@ class Component {
|
||||
mainNode;
|
||||
|
||||
constructor (mainNodeSelector, parentNode) {
|
||||
super();
|
||||
const content = document.querySelector(mainNodeSelector).content;
|
||||
if (content.children.length > 1) {
|
||||
const message = '<template> должен содержать только один элемент children';
|
||||
@ -45,31 +42,6 @@ class Component {
|
||||
this._listeners.push({element, eventName, listener});
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод подписки на события компонента
|
||||
* @param {string} eventName - событие компонента, на которое будет реагировать обработчик
|
||||
* @param {Function} listener - обработчик события
|
||||
*/
|
||||
subscribe = (eventName, listener) => {
|
||||
const listeners = this._events[eventName] || [];
|
||||
this._events[eventName] = [
|
||||
...listeners,
|
||||
listener,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод генерирует событие
|
||||
* @param {string} eventName - событие, которое необходимо сгенерировать
|
||||
* @param {unknown[]} args - аругемнты, который необходимо передать обработчикам события
|
||||
*/
|
||||
next = (eventName, ...args) => {
|
||||
const listeners = this._events[eventName];
|
||||
listeners.forEach((listener) => {
|
||||
listener(...args);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод уничтожения компонента. Удаляет элемент из верстки, снимает обработчики и очищает подписки
|
||||
*/
|
||||
@ -79,7 +51,7 @@ class Component {
|
||||
});
|
||||
this.mainNode.remove();
|
||||
this._listeners = [];
|
||||
this._events = {};
|
||||
this.clearSubscribes();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user