The onslotchange
property of the GlobalEventHandlers
mixin is an event handler that processes slotchange
events.
The slotchange
event is fired on HTMLSlotElement
instances (<slot>
elements) when the node(s) contained in the slot change.
The following snippet is a slightly modified version of our slotchange example which uses onslotchange
rather than adding a listener for the slotchange
event.
First the code gets an array of all the <slot>
s and then assigns a handler function to the onslotchange
property on the template's second slot — this second slot is the one that has its contents changed in the example. Every time the element in the slot changes, we log a report to the console saying which slot has changed, and what the new node inside the slot is.
let slots = this.shadowRoot.querySelectorAll('slot');
slots[1].onslotchange = function(e) {
let nodes = slots[1].assignedNodes();
console.log('Element in Slot "' + slots[1].name + '" changed to "' + nodes[0].outerHTML + '".');
};
We might alternatively handle the event at a higher level. The snippet below shows the equivalent code if the handler is assigned to onslotchange
on the shadowRoot
. Every time the element in any slot changes, we log a report to the console saying which slot has changed, and what the new node inside the slot is.
this.shadowRoot.onslotchange = function(e) {
const nodes = e.originalTarget.assignedNodes();
console.log(`Element in Slot "${e.originalTarget.name}" changed to "${nodes[0].outerHTML}".`);
};