<slot>permalink
<slot><!-- retrocesso opcional --></slot><slot name="x"><!-- retrocesso opcional --></slot><slot prop={value} />Os componentes podem ter conteúdo filho, da mesma maneira que os elementos podem.
O conteúdo é exposto no componente filho usando o elemento <slot>, que pode conter conteúdo de retrocesso que é interpretado se nenhum filho for fornecido:
<!-- Widget.svelte -->
<div>
<slot>
this fallback content will be rendered when no content is provided, like in the first example
</slot>
</div>
<!-- App.svelte -->
<Widget />
<!-- este componente interpretará o conteúdo padrão -->
<Widget>
<p>this is some child content that will overwrite the default slot content</p>
</Widget>Nota: Se quisermos interpretar o elemento <slot>, podemos usar <svelte:element this="slot" />.
<slot name="name">permalink
As ranhuras nomeadas permite os consumidores migrar áreas específicas. Eles também pode ter conteúdo de retrocesso:
<!-- Widget.svelte -->
<div>
<slot name="header">No header was provided</slot>
<p>Some content between header and footer</p>
<slot name="footer" />
</div>
<!-- App.svelte -->
<Widget>
<h1 slot="header">Hello</h1>
<p slot="footer">Copyright (c) 2019 Svelte Industries</p>
</Widget>Os componentes podem ser colocados numa ranhura nomeada usando a sintaxe <Component slot="name" />. No sentido de colocar o conteúdo numa ranhura sem usar um elemento envolvente, podemos usar o elemento especial <svelte:fragment>:
<!-- Widget.svelte -->
<div>
<slot name="header">No header was provided</slot>
<p>Some content between header and footer</p>
<slot name="footer" />
</div>
<!-- App.svelte -->
<Widget>
<HeaderComponent slot="header" />
<svelte:fragment slot="footer">
<p>All rights reserved.</p>
<p>Copyright (c) 2019 Svelte Industries</p>
</svelte:fragment>
</Widget>$$slotspermalink
$$slots é um objeto cujas chaves são os nomes das ranhuras passados ao componente pelo pai. Se o pai não passar uma ranhura com um nome particular, que o nome estará presente no $$slots. Isto permite os componentes interpretar uma ranhura (e outros elementos, como envolvedores para estilização) apenas se o pai o fornecer.
Nota que passar explicitamente um ranhura nomeada vazia adicionará o nome desta ranhura ao $$slots. Por exemplo, se um pai passar <div slot="title" /> à um componente filho, $$slots.title será verdadeiro dentro do filho:
<!-- Card.svelte -->
<div>
<slot name="title" />
{#if $$slots.description}
<!-- Este <hr> e a ranhura interpretará apenas
se uma ranhura nomeada "description" for fornecida. -->
<hr />
<slot name="description" />
{/if}
</div>
<!-- App.svelte -->
<Card>
<h1 slot="title">Blog Post Title</h1>
<!-- Nenhuma ranhura nomeada "description" foi fornecida
assim a ranhura opcional não será interpretada. -->
</Card><slot key={value}>permalink
As ranhuras podem ser interpretadas zero ou mais vezes e podem passar valores de volta para o pai usando propriedades. O pai expõe os valores ao modelo de marcação da ranhura usando a diretiva let:.
As regras de abreviação habituais aplicam-se — let:item é equivalente ao let:item={item}, e <slot {item}> é equivalente ao <slot item={item}>:
<!-- FancyList.svelte -->
<ul>
{#each items as item}
<li class="fancy">
<slot prop={item} />
</li>
{/each}
</ul>
<!-- App.svelte -->
<FancyList {items} let:prop={thing}>
<div>{thing.text}</div>
</FancyList>As ranhuras nomeadas também podem expor valores. A diretiva let: liga-se ao elemento com o atributo slot:
<!-- FancyList.svelte -->
<ul>
{#each items as item}
<li class="fancy">
<slot name="item" {item} />
</li>
{/each}
</ul>
<slot name="footer" />
<!-- App.svelte -->
<FancyList {items}>
<div slot="item" let:item>{item.text}</div>
<p slot="footer">Copyright (c) 2019 Svelte Industries</p>
</FancyList><svelte:self>permalink
O elemento <svelte:self> permite um componente incluir-se a si mesmo, recursivamente.
Ele não pode aparecer no alto nível da nossa marcação; deve estar dentro dum bloco if ou each ou passado à uma ranhura do componente para evitar um laço de repetição infinito:
<script>
/** @type {number} */
export let count;
</script>
{#if count > 0}
<p>counting down... {count}</p>
<svelte:self count={count - 1} />
{:else}
<p>lift-off!</p>
{/if}<svelte:component>permalink
<svelte:component this={expression} />O elemento <svelte:component> interpreta um componente dinamicamente, usando o construtor do componente especificado como a propriedade this. Quando a propriedade muda, o componente é destruído e recriado:
Se this for falso, nenhum componente é interpretado:
<svelte:component this={currentSelection.component} foo={bar} /><svelte:element>permalink
<svelte:element this={expression} />O elemento <svelte:element> permite-nos interpretar um elemento dum tipo especificado dinamicamente. Isto é útil por exemplo quando exibimos conteúdo de texto rico a partir dum sistema de gestão de conteúdo. Quaisquer propriedades e ouvintes de evento presentes serão aplicados ao elemento.
O único vínculo suportado é o bind:this, uma vez que os vínculos específicos do tipo de elemento que a Svelte faz em tempo de construção (por exemplo, bind:value para os elementos de entrada) não funcionam com um tipo de marcador dinâmico.
Se this tiver um valor nulo, o elemento e seus filhos não serão interpretados.
Se this for o nome dum elemento nulo (por exemplo, br) e <svelte:element> tiver elementos filho, um erro de tempo de execução será lançado no modo de desenvolvimento:
<script>
let tag = 'div';
/** @type {(e: MouseEvent) => void} */
export let handler;
</script>
<svelte:element this={tag} on:click={handler}>Foo</svelte:element><svelte:window>permalink
<svelte:window on:event={handler} /><svelte:window bind:prop={value} />O elemento <svelte:window> permite-nos adicionar ouvintes de evento ao objeto window sem preocupar-se com a remoção dos mesmos quando o componente for destruído, ou verificar pela existência do window quando interpretar a partir do servidor.
Ao contrário de <svelte:self>, este elemento apenas pode aparecer no alto nível do nosso componente e nunca deve estar dentro dum bloco ou elemento:
<script>
/** @param {KeyboardEvent} event */
function handleKeydown(event) {
alert(`pressed the ${event.key} key`);
}
</script>
<svelte:window on:keydown={handleKeydown} />Noś também podemos vincular às seguintes propriedades:
innerWidthinnerHeightouterWidthouterHeightscrollXscrollYonline— um pseudónimo parawindow.navigator.onLinedevicePixelRatio
Todos exceto scrollX e scrollY são de apenas leitura:
<svelte:window bind:scrollY={y} />Nota que a página não será deslocada para o valor inicial para evitar problemas de acessibilidade. Apenas mudanças subsequentes à variável vinculada de
scrollXescrollYcausarão deslocamento. No entanto, se o comportamento de deslocamento for desejado, podemos chamarscrollTo()naonMount().
<svelte:document>permalink
<svelte:document on:event={handler} /><svelte:document bind:prop={value} />De maneira semelhante ao <svelte:window>, este elemento permite-nos adicionar ouvintes aos eventos sobre o document, tais como visibilitychange, os quais não disparam sobre o window. Ele também permite-nos usar ações sobre o document.
Tal como acontece com <svelte:window>, este elemento apenas pode aparecer no alto nível do nosso componente e nunca deve estar dentro dum bloco ou elemento:
<svelte:document on:visibilitychange={handleVisibilityChange} use:someAction />Nós também podemos vincular às seguintes propriedades:
fullscreenElementvisibilityState
All are readonly. Todas são de apenas leitura.
<svelte:body>permalink
<svelte:body on:event={handler} />De maneira semelhante ao <svelte:window>, este elemento permite-nos adicionar ouvintes aos eventos sobre o document.body, tais como mouseenter e mouseleave, os quais não disparam-se sobre o window. Ele também permite-nos usar ações sobre o elemento <body>.
Tal como acontece com <svelte:window> e <svelte:document>, este elemento apenas pode aparecer no alto nível do nosso componente e não deve estar dentro dum bloco ou elemento:
<svelte:body on:mouseenter={handleMouseenter} on:mouseleave={handleMouseleave} use:someAction /><svelte:head>permalink
<svelte:head>...</svelte:head>Este elemento torna possível inserir elementos no document.head. Durante a interpretação no lado do servidor, o conteúdo do head é exposto separadamente ao conteúdo de html principal.
Tal como acontece com <svelte:window>, <svelte:document> e <svelte:body>, este elemento apenas pode aparecer no alto nível do nosso componente e nunca deve estar dentro dum bloco ou elemento:
<svelte:head>
<title>Hello world!</title>
<meta name="description" content="This is where the description goes for SEO" />
</svelte:head><svelte:options>permalink
<svelte:options option={value} />O elemento <svelte:options> fornece um lugar para especificar opções do compilador por componente, as quais são detalhadas na seção do compilador. As possíveis opções são:
immutable={true}— nunca usamos dados mutáveis, então o compilador pode fazer verificações de igualdade referencial simples para determinar se os valores mudaram.immutable={false}— o padrão. A Svelte será mais conservadora sobre se ou não os objetos mutáveis mudaram.accessors={true}— adiciona recuperadores e definidores para as propriedades do componente.accessors={false}— o padrão.namespace="..."— o espaço nominal onde este componente será usado, mais comummente "svg"; usamos o espaço nominal "foreign" para abandonar os nomes de atributo insensíveis a caixa e os avisos específicos de HTML.customElement="..."— o nome à usar quando compilamos este componente como um elemento personalizado.
<svelte:options customElement="my-custom-element" /><svelte:fragment>permalink
O elemento <svelte:fragment> permite-nos colocar conteúdo numa ranhura nomeada sem envolvê-la num elemento de DOM contentor. Isto preserva a disposição do fluxo do nosso componente intacto:
<!-- Widget.svelte -->
<div>
<slot name="header">No header was provided</slot>
<p>Some content between header and footer</p>
<slot name="footer" />
</div>
<!-- App.svelte -->
<Widget>
<h1 slot="header">Hello</h1>
<svelte:fragment slot="footer">
<p>All rights reserved.</p>
<p>Copyright (c) 2019 Svelte Industries</p>
</svelte:fragment>
</Widget>