Как правильно инициализировать компонент?
Всем привет. Подскажите, пожалуйста, как правильно реализовать следующий функционал.
Предположим у меня есть разработанный компонент, и я его поместил на страницу: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="/dist/app.css"> <title>Document</title> </head> <body> <div class="app"> <div class="card" data-component="card"> <div class="card__container"> <button class="card__button" type="button" data-card-ref="button"> button </button> </div> </div> </div> <script src="/dist/app.js"></script> </body> </html> </html> Вот его class: class Card { constructor(el) { this.el = el; this.button = this.el.querySelector('[data-card-ref="button"]'); this.init(); } init() { console.log('Card is running!'); this.button.addEventListener('click', this.onClickPrimaryButton); } onClickPrimaryButton = (event) => { console.log(event.target); } } const card = new Card(document.querySelector('[data-component="card"]')); Соответственно, class проинициализируется, и сработают написанные в нем методы. Теперь вопрос: Если я добавлю на страницу несколько таких компонентов: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="/dist/app.css"> <title>Document</title> </head> <body> <div class="app"> <div class="card" data-component="card"> <div class="card__container"> <button class="card__button" type="button" data-card-ref="button"> button </button> </div> </div> <div class="card" data-component="card"> <div class="card__container"> <button class="card__button" type="button" data-card-ref="button"> button </button> </div> </div> <div class="card" data-component="card"> <div class="card__container"> <button class="card__button" type="button" data-card-ref="button"> button </button> </div> </div> </div> <script src="/dist/app.js"></script> </body> </html> </html> А класс останется прежним. То и отработает он только для первого компонента. Подскажите, пожалуйста, как сделать их независимыми. Т.е. сейчас я ожидаю, что он трижды (в данном случае) проинициализируется: console.log('Card is running!'); // сработает три раза console.log(event.target); // выведет непосредственно тот элемент с которым я работаю |
darktowerk56c,
document.addEventListener("DOMContentLoaded", function(){ for(const element of document.querySelectorAll("[data-component='card']")) new Card(element); }) |
Спасибо.
|
Цитата:
|
Часовой пояс GMT +3, время: 00:46. |