Я новичок в веб-разработке, и недавно я много дискутировал и рассказывал о Custom Elements v1. Они позволяют вам определять свои собственные элементы с их собственным пользовательским поведением и использовать Shadow DOM, с областью видимых стилей.
Когда я узнал об этом на сайте this, я не понял таблицу в разделе «Реакции пользовательских элементов». Может кто-нибудь объяснить разницу между использованием «конструктора» и «connectedCallback», а также термины «созданный или обновленный» и «вставленный в DOM» ?.
Для получения дополнительной информации определение моего пользовательского элемента находится в отдельном файле, и в нем используется теневая DOM. Я использовал HTML Import для импорта определения элемента в основной документ.Разница между конструктором и connectedCallback в пользовательских элементах v1
ответ
Как уже отмечалось на Juvian в комментариях:
constructor()
вызывается, когда элемент создан.connectedCallback()
вызывается, когда (после) элемент прикреплен к DOM.
constructor()
вызова не является специфичным для пользовательских элементов, это происходит с любым созданием объекта (как правило, созданное с оператором new
), а не только HTML элементов.
В вызове constructor()
вы можете создать Shadow DOM, но вы не можете добавлять Узлы внутри обычного DOM, и вы не можете добавить или установить атрибут.
О обновления:
обновление происходит, когда неизвестный тег объявлен в HTML-коде определяется впоследствии (по методу customElements.define()
). Элемент «неизвестный» становится «обычным» элементом. Затем вызывается методы constructor()
и connectedCallback()
.
Примечание: когда элемент создается (как неизвестно), а затем определяется, он обновляется только при прикреплении.
class CE extends HTMLElement {
constructor() {
super()
console.info('constructed')
}
connectedCallback() {
console.info('connected')
this.innerHTML = 'Hello' //can't be set in constructor()
}
}
B1.onclick = function() {
ce = document.createElement('c-e')
ce.textContent = 'unknown'
}
B2.onclick = function() {
document.body.appendChild(ce)
}
B3.onclick = function() {
customElements.define('c-e', CE)
}
<button id=B1>create</button>
<button id=B2>attach</button>
<button id=B3>define</button>
Попробуйте различные комбинации с выше фрагмент кода:
- Выполнить то: 1 Создать - 2 Attach - 3 Определение
- Выполнить то: 1 Создать - 2 Определить - 3 Прикрепить
- Бег потом: 1 Определить - 2 Создать - 3 Прикрепить
Спасибо, теперь я понимаю это более красиво !!! – Shashank
В настоящее время в Chrome я могу установить 'this.innerHTML' внутри конструктора. – kzh
@kzh, только если вы определяете пользовательский элемент после его рендеринга (т. Е. Обновление неизвестного элемента). это не более частый случай использования и не поддерживается спецификацией. – Supersharp
- 1. Разница между конструктором и конструктором по умолчанию
- 2. Разница между конструктором и объектом
- 3. разница между $ _POST [ «v1»] и $ _POST [v1] на числовых полях
- 4. В чем разница между простым конструктором и конструктором с базой?
- 5. В чем разница между конструктором функции и конструктором прототипа?
- 6. Есть ли разница между конструктором и конструктором в javascript?
- 7. В чем разница между пустым конструктором и конструктором
- 8. Разница между конструктором и свойствами в C#
- 9. Разница между конструктором абстрактных классов и конструктором нормального класса?
- 10. Разница между нормальным конструктором и мутатором? Java
- 11. Разница между конструктором и инициализацией членов класса?
- 12. разница между конструктором копирования Java и C++
- 13. Разница в SNMP v1, v2c и v3
- 14. ARM Assembly - в чем разница между регистрами v1 и a1?
- 15. В чем разница между Custom Elements v0 и v1?
- 16. Разница в аргументеCaptor между Mockito v1 и v2
- 17. В чем разница между конструктором и процедурой в записях Delphi?
- 18. В чем разница между конструктором прокси и Reflect?
- 19. В чем разница между BlobBuilder и новым конструктором Blob?
- 20. В чем разница между инициализатором экземпляра и конструктором?
- 21. В чем разница между конструктором приложений и app.Onstartup?
- 22. Разница между конструктором с параметрами и без параметров в C#
- 23. Разница между конструктором типа и функцией возврата монады (в Haskell)
- 24. В чем разница между инициализацией и конструктором на базовой модели
- 25. В чем разница между инициализатором объекта и конструктором?
- 26. В чем разница между конструктором объектов и глобальным объектом
- 27. Разница между getter setter и конструктором в C++?
- 28. В чем разница между конструктором и функцией класса
- 29. Конфликт между конструктором копирования и конструктором переадресации
- 30. Разница между конструктором и новым/malloc, разница между деструктором и удалением/свободным
конструктор вызывается, если вы делаете что-то вроде var button = document.createElement ('fancy-button'), тогда как connectedCallback вызывается только после того, как вы выполните document.body.appendChild (button); То есть он добавляется к элементу в dom. – juvian
Что делать, если мы объявляем тег непосредственно в основном документе как « fancy-button>"? –
Shashank
Кажется, в этом случае нет никакой реальной разницы, кроме того, что один вызывается перед другим: https://jsfiddle.net/ddjvxkpd/ – juvian