Pular para o conteúdo

Atributo #[Ghost]

Aplique a uma classe de componente — sem necessidade de mudanças na view:

use Ghostwire\Attributes\Ghost;
#[Ghost(mode: 'synthesize', delay: 200, hold: 400)]
class ProductTable extends Component
{
// ...
}
ParâmetroTipoPadrãoSignificado
mode'synthesize'|'freeze'|'off''synthesize'Estratégia de carregamento para esse componente
onlyarray<string>|nullnullAções que ativam o ghost
exceptarray<string>|nullnullAções que nunca o ativam
delayint|nullnull (padrão do pacote: 120ms)Atraso antes do ghost aparecer
holdint|nullnull (padrão do pacote: 300ms)Duração mínima visível
rowsint|nullnullDica de linhas repetidas para um host vazio
pollboolfalsePermite que mensagens de polling ativem o ghost
syncboolfalsePermite que mensagens somente de propriedade (sync) o ativem
lazyboolfalseReutiliza a árvore aprendida como placeholder lazy
panelsboolfalsePromove containers visualmente distintos ao seu próprio panel bone

Filtragem de ações — restrinja ou exclua ações específicas da configuração em nível de classe:

#[Ghost(only: ['loadMore', 'applyFilters'])]
class ProductList extends Component
{
// ...
}

Somente loadMore e applyFilters ativam o ghost; toda outra ação o deixa em paz.

#[Ghost(except: ['toggleFavorite'])]
class ProductList extends Component
{
// ...
}

Toda ação ativa o ghost, exceto toggleFavorite.

#[Ghost(rows: 5)]
class OrderTable extends Component
{
// ...
}

Renderiza 5 linhas de esqueleto quando a tabela ainda não tem dados — o equivalente, em atributo, de wire:ghost.rows.5.

#[Ghost(poll: true)]
class LiveTicker extends Component
{
// ...
}

Permite que um refresh disparado por wire:poll também ative o ghost; mensagens de polling são silenciosas por padrão.

#[Ghost(sync: true)]
class SearchResults extends Component
{
// ...
}

Permite que uma atualização somente de propriedade (ex.: wire:model.live) também ative o ghost; mensagens de sync são silenciosas por padrão.

#[Ghost(lazy: true)]
class Dashboard extends Component
{
// ...
}

Reutiliza uma Bone Tree previamente aprendida como placeholder de carregamento lazy — veja Aprendizado para a configuração completa.

#[Ghost(panels: true)]
class ProductGrid extends Component
{
// ...
}

Cards com fundo, borda ou sombra visíveis ganham, cada um, seu próprio panel bone preenchido — veja Como funciona.

Sete níveis, do mais para o menos específico:

  1. Modificador de diretiva no elemento — ex.: wire:ghost.freeze
  2. Expressão de diretiva / direcionamento por ação — ex.: wire:ghost="applyFilters"
  3. #[Ghost] no método da ação em execução
  4. #[Ghost] na classe do componente
  5. #[Ghost] herdado de uma classe base ou trait
  6. config/ghostwire.php
  7. Padrões do pacote

A diretiva wire:ghost no elemento tem prioridade sobre o atributo #[Ghost]: uma configuração em nível de diretiva sobrepõe o que os níveis de atributo declararem, campo a campo. Qualquer campo que um determinado nível não declare passa para o próximo. Inspecione exatamente qual nível decidiu a configuração ao vivo de um componente com:

Terminal window
php artisan ghost:inspect
#[Ghost(mode: 'freeze')]
class ReportTable extends Component
{
#[Ghost(mode: 'synthesize', delay: 50)]
public function refresh() { /* ... */ }
}

O próprio atributo de refresh() sobrepõe o padrão em nível de classe, apenas para essa ação.