You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 8-web-components/5-slots-composition/article.md
+30-30Lines changed: 30 additions & 30 deletions
Original file line number
Diff line number
Diff line change
@@ -101,19 +101,19 @@ Il risultato viene detto "flattened" DOM:
101
101
</user-card>
102
102
```
103
103
104
-
...Ma il flattened DOM esiste poer scopi puramente di rendering e di gestione degli eventi. È come se fosse "virtuale". Le cose vengono mostrate così. Ma i nodi nel documento non vengono spostati!
104
+
...Tuttavia, il flattened DOM esiste puramente per scopi di rendering e gestione degli eventi. È come se fosse "virtuale". Le cose vengono mostrate così come le vediamo, ma i nodi nel documento non vengono spostati!
105
105
106
-
Ciò può essere facilmente verificato se andiamo ad eseguire `querySelectorAll`: i nodi saranno al proprio posto.
106
+
Ciò può essere facilmente verificato se eseguiamo`querySelectorAll`: i nodi saranno rimasti al proprio posto.
107
107
108
108
```js
109
-
//gli nodi degli <span> del light DOM sono ancora nella stessa posizione, dentro `<user-card>`
109
+
//i nodi degli <span> del light DOM sono ancora nella stessa posizione, quindi dentro `<user-card>`
Quindi, il flattened DOM deriva dallo shadow DOM andando ad inserire gli slots. Il browser ne effettua il rendering e li usa per ereditare gli stili e per la propagazione degli eventi (vedremo questi aspetti più avanti). Ma JavaScript vede ancora il documento "per quello che è", cioè come era prima del flattening.
113
+
Quindi, il flattened DOM deriva dallo shadow DOM con l'inserimento degli slots. Il browser ne effettua il rendering e li usa per ereditare gli stili e la propagazione degli eventi (vedremo questi aspetti più avanti). Ciononostante JavaScript vede ancora il documento "per quello che è", cioè come era prima del processo di flattening.
114
114
115
115
````warn header="Solo i figli top-level possono avere l'attributo slot=\"...\" "
116
-
L'attrbibuto `slot="..."` è valido solamente per i figli diretti dello shadow host (nel nostro esempio, l'elemento `<user-card>`). Per gli elementi annidati vengono ignorati.
116
+
L'attributo `slot="..."` è valido solamente per i figli diretti dello shadow host (nel nostro esempio, l'elemento `<user-card>`), gli elementi annidati, invece, vengono ignorati.
117
117
118
118
Ad esempio, qui il secondo `<span>` viene ignorato (dal momento che non è un figlio top-level di `<user-card>`):
119
119
```html
@@ -127,17 +127,17 @@ Ad esempio, qui il secondo `<span>` viene ignorato (dal momento che non è un fi
127
127
```
128
128
````
129
129
130
-
Se ci sono più elementi nel light DOM con lo stesso slot name, vengono inseriti nello slot, uno dopo l'altro, in successione.
130
+
Se ci sono più elementi nel light DOM con lo stesso slot name, questi vengono inseriti nello slot, uno dopo l'altro in successione.
131
131
132
-
Per esempio, qui abbiamo:
132
+
Per esempio, qui:
133
133
```html
134
134
<user-card>
135
135
<spanslot="username">John</span>
136
136
<spanslot="username">Smith</span>
137
137
</user-card>
138
138
```
139
139
140
-
Restituisce questo flattened DOM con due elementi dentro `<slot name="username">`:
140
+
Restituisce il flattened DOM con due elementi dentro `<slot name="username">`:
141
141
142
142
```html
143
143
<user-card>
@@ -156,7 +156,7 @@ Restituisce questo flattened DOM con due elementi dentro `<slot name="username">
156
156
157
157
## Slot fallback content
158
158
159
-
Se inseriamo qualcosa dentro uno`<slot>`, quest'ultimo rappresenterà il contenuto di ripiego, cioè quello "predefinito". Nel caso in cui non vi fossero contenuti corrispondenti nel light DOM, sarà questo il contenuto mostrato dal browser.
159
+
Se inseriamo qualcosa dentro l'elemento`<slot>`, rappresenterà il contenuto di ripiego, cioè quello "predefinito". Quindi, nel caso in cui non vi fossero contenuti corrispondenti nel light DOM, sarà questo il contenuto che verrà visualizzato dal browser.
160
160
161
161
Per esempio, in questo pezzo di shadow DOM, verrà visualizzato `Anonymous` se non ci sono `slot="username"` nel light DOM.
162
162
@@ -168,7 +168,7 @@ Per esempio, in questo pezzo di shadow DOM, verrà visualizzato `Anonymous` se n
168
168
169
169
## Slot "default": il primo senza nome
170
170
171
-
Il primo `<slot>` dello shadow DOM privo di nome è uno slot "default". Esso riceve tutti i nodi dal light DOM che non sono stati slottati da nessuna parte.
171
+
Il primo `<slot>` dello shadow DOM privo di nome è uno slot "default". Esso riceve al suo interno tutti i nodi dal light DOM che non sono stati slottati da nessuna parte.
172
172
173
173
Per esempio, aggiungiamo lo slot default al nostro `<user-card>` che mostrerà tutte le informazioni non slottate dell'utente:
174
174
@@ -207,9 +207,9 @@ customElements.define('user-card', class extends HTMLElement {
207
207
</user-card>
208
208
```
209
209
210
-
Tutti i contenuti del light DOM non slottati andranno a finire dentro il fieldset "Other information".
210
+
Tutti i contenuti del light DOM unslotted andranno a finire dentro il fieldset "Other information".
211
211
212
-
Glie elementi vengono accodati su uno slot, uno dopo l'altro, quindi anche i pezzi di informazione non slottare vanno a finire dentro lo slot default tutti insieme.
212
+
Gli elementi vengono accodati su uno slot, uno dopo l'altro, quindi anche i pezzi di informazione unslotted vanno a finire dentro lo slot default, tutti insieme.
213
213
214
214
Il flattened DOM apparirà come questo:
215
215
@@ -255,7 +255,7 @@ Ecco il markup per il `<custom-menu>`:
255
255
</custom-menu>
256
256
```
257
257
258
-
Invece il template dello shadow DOM con gli slot appropriati:
258
+
Questo è invece il template dello shadow DOM con gli slot appropriati:
259
259
260
260
```html
261
261
<templateid="tmpl">
@@ -267,8 +267,8 @@ Invece il template dello shadow DOM con gli slot appropriati:
267
267
</template>
268
268
```
269
269
270
-
1.`<span slot="title">`andrà a finire dentro `<slot name="title">`.
271
-
2. Ci sono tanti `<li slot="item">`, ma solo uno `<slot name="item">` nel template. Quindi tutti questi`<li slot="item">` verranno inseriti dentro `<slot name="item">` uno dopo l'altro, così da formare la lista.
270
+
1.`<span slot="title">`verrà inserito dentro `<slot name="title">`.
271
+
2. Ci sono tanti `<li slot="item">`, ma solo uno `<slot name="item">` nel template. Di conseguenza tutti gli elementi`<li slot="item">` verranno inseriti dentro `<slot name="item">` uno dopo l'altro, così da formare la lista.
272
272
273
273
Il flattened DOM diventa:
274
274
@@ -291,9 +291,9 @@ Il flattened DOM diventa:
291
291
</custom-menu>
292
292
```
293
293
294
-
Qualcuno potrebbe fare notare che, in un DOM valido, un `<li>` dovrebbe essere figlio diretto di `<ul>`. Ma questo è un flattened DOM, che descrive come il componente verrà renderizzato, quindi è perfettamente regolare.
294
+
Qualcuno potrebbe notare che, in un DOM valido, un `<li>` dovrebbe essere figlio diretto di `<ul>`. Tuttavia questo è un flattened DOM, che descrive la maniera nella qualre il componente verrà renderizzato, quindi è perfettamente lecito e regolare.
295
295
296
-
Dobbiamo solo aggiungere un gestire al `click` per aprire e chiudere la lista, ed il `<custom-menu>` sarà pronto:
296
+
Dobbiamo solo aggiungere una gestione per il `click`, per poter aprire e chiudere la lista, ed il `<custom-menu>` sarà pronto:
@@ -322,11 +322,11 @@ Certamente possiamo andare ad aggiungere più funzionalità: eventi metodi e via
322
322
323
323
E se volessimo aggiungere e rimuovere elementi del menù dinamicamente?
324
324
325
-
**Il browser monitora gli slots e aggiorna la visualizzazione all'inserimento o rimozione di elementi slottati.**
325
+
**Il browser monitora gli slots e aggiorna la visualizzazione all'inserimento o rimozione di elementi slotted.**
326
326
327
-
Inoltre, dal momento che i nodi del light DOM non vengono copiati, ma solo visualizzati negli slots, le modifiche al loro interno saranno immediatamente visibili.
327
+
Inoltre, dal momento che i nodi del light DOM non vengono copiati, ma solamente visualizzati negli slots, le modifiche al loro interno saranno immediatamente visibili.
328
328
329
-
Quindi non dobbiamo fare nulla per aggiornare la visualizzazione. Ma se il codice del componente vuole avere dei dettagli sulla modifica degli slots, allora si potrà usare l'evento `slotchange`.
329
+
Ne consegue che non dobbiamo fare assolutamente nulla per aggiornare la visualizzazione. Ma se il codice del componente vuole dei dettagli sulla modifica degli slots, allora si potrà usare l'evento `slotchange`.
330
330
331
331
Per esempio, qui l'elemento del menù viene inserito dinamicamente dopo un secondo, ed il titolo cambia dopo 2 secondi:
332
332
@@ -344,7 +344,7 @@ customElements.define('custom-menu', class extends HTMLElement {
344
344
<ul><slotname="item"></slot></ul>
345
345
</div>`;
346
346
347
-
// shadowRoot non puo' gestori di evento, quindi usiamo il primo nodo figlio
347
+
// shadowRoot non puo' gestire l'evento, quindi usiamo il primo nodo figlio
@@ -372,23 +372,23 @@ In questo esempio, ci sono due eventi `slotchange`:
372
372
373
373
`slotchange: item` viene scaturito quando viene aggiunto un nuovo `<li slot="item">`.
374
374
375
-
Norta bene: non ci sono eventi `slotchange` dopo 2 secondi, quando viene modificato il contenuto di `slot="title"`. Questo perché non ci sono modifiche slot. Abbiamo modificato il contenuto dentro l'elemento slotted, che è tutt'altra cosa.
375
+
Nota bene: non ci sono eventi `slotchange` dopo 2 secondi, quando viene modificato il contenuto di `slot="title"`. Questo perché non ci sono modifiche slot. Abbiamo modificato il contenuto dentro l'elemento slotted, che è uan cosa differente e non collegata.
376
376
377
-
Volendo tenere traccia delle modifiche interne al light DOM tramite JavaScript, potremmo anche usare un meccanismo più generico come quello dei [MutationObserver](info:mutation-observer).
377
+
Volendo però tenere traccia delle modifiche interne nel light DOM tramite JavaScript, potremmo anche usare un meccanismo più generico come quello dei [MutationObserver](info:mutation-observer).
378
378
379
379
## Slot API
380
380
381
381
Infine, citiamo i metodi JavaScript inerenti gli slots.
382
382
383
-
Come già visto, JavaScript osserva il DOM "effettivo", privo di flattening. Ma, se lo shadow tree ha il `{mode: 'open'}`, possiamo vedere quali elementi vengono assegnati a uno slot e, vice versa, lo slot con l'elemento al suo interno:
383
+
Come già visto, JavaScript tiene d'occhio il DOM "effettivo", privo di flattening. Ma, se lo shadow tree ha il `{mode: 'open'}`, possiamo vedere quali elementi vengono assegnati a uno slot o, viceversa, lo slot con l'elemento al suo interno:
384
384
385
385
-`node.assignedSlot` -- restiuisce l'elemento `<slot>` a cui è assegnato il `node`.
386
-
-`slot.assignedNodes({flatten: true/false})` -- nodi DOM, assegnati allo slot. L'opzione `flatten` è `false` di default. Se impostata esplicitamente a `true`, analizzerà più in profondità nel flattened DOM, restituendo gli slot annidati in caso di componenti annidati o il fallsback content se non vi fossero nodi assegnati.
387
-
-`slot.assignedElements({flatten: true/false})` -- Elementi DOM, assegnati allo slot (come sopra, ma solo elementi nodi).
386
+
-`slot.assignedNodes({flatten: true/false})` -- nodi DOM, assegnati allo slot. L'opzione `flatten` è `false` di default. Se impostata esplicitamente a `true`, analizzerà più in profondità all'interno del flattened DOM, restituendo gli slot annidati in caso di componenti annidati o il fallback content, in assenza di nodi assegnati.
387
+
-`slot.assignedElements({flatten: true/false})` -- Elementi DOM, assegnati allo slot (come sopra, ma solo elementi di tipo nodo).
388
388
389
-
Questi metodi sono utili quando dobbiamo non solo mostrare lo sloetted content, ma anche tracciarli in JavaScript.
389
+
Questi metodi sono utili quando dobbiamo mostrare, non solo lo slotted content, ma anche tenerne traccia con JavaScript.
390
390
391
-
Ad esempio, se il componente `<custom-menu>`component vuole sapere, cosa mostra, può tracciare `slotchange` ed ottenere gli elementi da `slot.assignedElements`:
391
+
Ad esempio, se il componente `<custom-menu>` vuole sapere cosa sta mostrando, può tracciare `slotchange` ed ottenere gli elementi da `slot.assignedElements`:
392
392
393
393
```html run untrusted height=120
394
394
<custom-menuid="menu">
@@ -431,12 +431,12 @@ setTimeout(() => {
431
431
432
432
## Riepilogo
433
433
434
-
Generalmente, se un elemento ha lo shadow DOM, il suo light DOM non viene mostrato. Gli slots permettono di mostrare gli elementi del light DOM ne punti contrassegnati dello shadow DOM.
434
+
Generalmente, se un elemento ha lo shadow DOM, il suo light DOM non viene mostrato. Gli slots permettono di mostrare gli elementi del light DOM nei punti contrassegnati dello shadow DOM.
435
435
436
436
Esistono due tipi di slots:
437
437
438
438
- Named slots: `<slot name="X">...</slot>` -- ottiene i figli light tramite `slot="X"`.
439
-
- Default slot: il primot `<slot>` senza un nome (i successivi elementi privi di nome vengono ignorati) -- ottiene i figli light unslotted.
439
+
- Default slot: il primot `<slot>` senza un nome (i successivi elementi privi di nome vengono ignorati) -- ottiene i figli light unslotted.
440
440
- Se ci sono più elementi per uno stesso slot -- vengono accodati uno dopo l'altro.
441
441
- Il contenuto dell'elemento `<slot>` viene usato come un ripeigo (fallback). Viene mostrato se non ci sono figli light per un determinato slot.
0 commit comments