Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Ajuste da tag div com slot nomeado

Oi Flávio, tudo bem?

Muito bom esse curso, estou gostando muito!! Meus parabéns e muito obrigado por disponibilizar aqui na Alura!

Acredito que na apresentação da aula faltou explicar que, devido a colocarmos o slot dentro de uma div e transferirmos o atributo name do slot para a mesma no arquivo Painel.vue, a div que possui o atributo slot nomeado no App.vue deve ter a referência do nome retirado.

Pelo menos, no meu projeto, tive que fazer essa alteração para funcionar.

//Painel.vue
<template>
    ...
        <div name="conteudo" class="painel-corpo" v-show="visivel">
            <slot>
            </slot>
        </div>
    ...
</template>
// App.vue

De:
<template>
    ...
     <meu-painel :titulo="foto.titulo">
        <div slot="conteudo">
           <img class="imagem-responsiva" :src="foto.url" :alt="foto.titulo" />
        </div>
        <h4 slot="rodape">@2017</h4>
     </meu-painel>
</template>

Para:
<template>
    ...
     <meu-painel :titulo="foto.titulo">
        <div slot>
           <img class="imagem-responsiva" :src="foto.url" :alt="foto.titulo" />
        </div>
        <h4 slot="rodape">@2017</h4>
     </meu-painel>
</template>
3 respostas
solução!

Oi Guilherme, blz?

Tipo, estou na dúvida da sua explicação, pois não uso name no slot do painel ao longo do treinamento. O que eu faço é ter uma explicação complementar chamada named slots que só nela falo de slot nomeado.

É isso que você esta se referindo? Talvez eu não tenha entendido o contexto.

Oi Flavio...isso mesmo.

Mantive os nomes nos slots no meu projeto com base na explicação complementar da aula 4.

Oi Guilherme, você esta quase certo....

Se por ventura você utilizar o named slots seu código deveria ficar assim:

//Painel.vue

<template>
    <div class="painel">
    <div class="painel-titulo" ...>
        <div class="painel-corpo" v-show="visivel">
            <slot name="conteudo"></slot>
        </div>
    </div>
</template>

Observe que a tag <slot> continua com o atributo name!

E na utilização com componente:

//App.vue

<template>
    ...
     <meu-painel :titulo="foto.titulo">
        <div slot="conteudo">
           <img class="imagem-responsiva" :src="foto.url" :alt="foto.titulo" />
        </div>
     </meu-painel>
</template>

Observe que você continua indicando o valor do atributo slot agora na tag <div>!

Espero ter esclarecido a sua duvida e bons estudos!