Ich bin neu in der Webentwicklung und in letzter Zeit habe ich viele Diskussionen gesehen und über Custom Elements v1 gesprochen. Sie ermöglichen Ihnen, Ihre eigenen Elemente mit ihren eigenen benutzerdefinierten Verhaltensweisen zu definieren, und wenn Shadow DOM verwendet wird, mit Scoped-Stilen.
Als ich in this Website darüber lernte, habe ich die Tabelle unter "Benutzerdefinierte Element Reaktionen" nicht verstanden. Kann jemand bitte den Unterschied zwischen der Verwendung von "constructor" und "connectedCallback" sowie den Begriffen "created or upgraded" und "into the DOM" erklären?
Für zusätzliche Informationen ist die Definition meines benutzerdefinierten Elements in einer separaten Datei und es verwendet Shadow-DOM. Ich habe HTML-Import verwendet, um die Definition des Elements in das Hauptdokument zu importieren.Unterschied zwischen Konstruktor und connectedCallback in benutzerdefinierten Elementen v1
Antwort
Wie bereits von Juvian in den Kommentaren angegeben:
constructor()
aufgerufen wird, wenn das Element erstellt ist.connectedCallback()
wird aufgerufen, wenn (nach) das Element an das DOM angehängt ist.
Der constructor()
Anruf ist auf kundenspezifische Elemente, die nicht spezifisch, es mit jeder Objekterstellung auftritt (in der Regel mit den new
Betreibern erstellt wird), und nicht nur HTML-Elemente.
Im Aufruf constructor()
können Sie das Schatten-DOM erstellen, aber Sie können keine Knoten innerhalb des normalen DOM hinzufügen, und Sie können auch keine Attribute hinzufügen oder festlegen.
über Upgrade:
Die Upgrade tritt auf, wenn ein unbekannter Tag in dem HTML-Code angegeben werden danach definiert wird (von der customElements.define()
Methode). Das Element "unbekannt" wird zu einem "benutzerdefinierten" Element. Die Methoden constructor()
und connectedCallback()
werden dann aufgerufen.
Hinweis: Wenn ein Element erstellt (als unknow) und dann definiert wird, wird es nur aktualisiert, wenn es angehängt ist.
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>
Probieren Sie verschiedene Kombinationen mit dem obigen Auszug:
- Run dann: 1 Erstellen - 2 Bringen - 3 Definieren
- Run dann: 1 Erstellen - 2 definieren - 3 Anfügen
- Starten Sie dann: 1 Definieren - 2 Erstellen - 3 Anfügen
Danke, jetzt verstehe ich es besser !!! – Shashank
In Chrome kann ich 'this.innerHTML' im Konstruktor setzen. – kzh
@kzh nur, wenn Sie das benutzerdefinierte Element nach dem Rendern definieren (d. H. Aktualisierung eines unbekannten Elements). es ist nicht der häufigere Anwendungsfall und wird nicht von der Spezifikation unterstützt. – Supersharp
- 1. Warum ist connectCallback() nicht mit dem gleichen wie der Konstruktor mit benutzerdefinierten Elementen v1 gebunden?
- 2. Webkomponenten v1 - Illegaler Konstruktor
- 3. Unterschied zwischen benutzerdefinierten Metadaten und statischen Funktionen?
- 4. Platz zwischen den Elementen in benutzerdefinierten Listenansicht
- 5. Enormer Apk-Unterschied zwischen Gradle v1.x vs v2.x
- 6. C# Unterschied zwischen statischem Element oder statischem Konstruktor und Singleton
- 7. Was ist der Unterschied zwischen einem Instanzinitialisierer und einem Konstruktor?
- 8. Was ist der Unterschied zwischen Proxy-Konstruktor und Reflect?
- 9. Was ist der Unterschied zwischen IndPetRestriction- und Pets PropertyOptionInfo-Elementen?
- 10. Unterschied zwischen holen und .getJSON $
- 11. Unterschied zwischen `% in%` und `==`
- 12. Unterschied zwischen getElementsByClassName und querySelectorAll?
- 13. sql: BETWEEN v1 UND v2
- 14. Unterschied zwischen Roles.GetRolesForUser und Roles.Provider.GetRolesForUser?
- 15. Unterschied zwischen einem benutzerdefinierten UIStoryboardSegue und UIViewController Übergang
- 16. Was ist der Unterschied zwischen vordefinierten Richtlinien und benutzerdefinierten Richtlinien?
- 17. Öffentlicher Konstruktor und statischer Konstruktor
- 18. Unterschied zwischen AuthenticationManagerBuilder und HttpSecurity.authenticationProvider
- 19. Unterschied zwischen ObjectManager und EntityManager in Symfony2?
- 20. Unterschied zwischen $ @ und $! in Perl
- 21. Unterschied zwischen [] und [,,] in Python
- 22. Unterschied zwischen '.' und "." in Java
- 23. Unterschied zwischen $ {} und $() in Bash
- 24. Unterschied zwischen und „-“ in r
- 25. Unterschied zwischen .. und ... in Ruby
- 26. Unterschied zwischen `! == undefined` und` in`
- 27. Unterschied zwischen "" und "" in Python
- 28. Unterschied zwischen = + und + = in Java?
- 29. Unterschied zwischen // und /// in C#
- 30. ARM Assembly - was ist der Unterschied zwischen v1 und a1 Registern?
Konstruktor wird aufgerufen, wenn Sie etwas wie var button = document.createElement ('fancy-button') tun, connectedCallback dagegen nur, wenn Sie document.body.appendChild (button); Das heißt, es wird an ein Element im Dom angehängt. – juvian
Was ist, wenn wir das Tag direkt im Hauptdokument als " fancy-button>" deklarieren? –
Shashank
Scheint in diesem Fall gibt es keinen wirklichen Unterschied außer, dass man vor dem anderen aufgerufen wird: https://jsfiddle.net/ddjvxkpd/ – juvian