Livewire - Seleção de bootstrap sem renderização
Estou lutando por horas nisso, simplesmente não consigo colocar o bootstrap-select funcionando dentro de um componente livewire, então tentarei ser específico no meu cenário e espero que alguém possa me ajudar. Eu tenho um projeto laravel usando este adminlte, então meu código é:
web.php
Route::livewire('/new','new')->layout('adminlte::page');
Então, eu tenho minha página A onde estou incluindo o componente livewire que, a propósito, é um modal de bootstrap.
@livewire('new')
Dentro do meu app.scss eu tenho: (instalei o bootstrap select com npm)
// Bootstrap
@import '~bootstrap/scss/bootstrap';
@import '~bootstrap-select/sass/bootstrap-select.scss';
E dentro do meu app.js eu tenho:
require('./bootstrap');
require('../../node_modules/bootstrap-select/dist/js/bootstrap-select');
Depois disso, fui até meu arquivo blade livewire e tentei usar o exemplo 'Selecionar / desmarcar todas as opções:
<select class="selectpicker" multiple data-actions-box="true">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
mas nada acontece, então descobri este link e usei a solução que é fornecida, mas o resultado é o mesmo.
Alguém poderá me indicar a direção correta? Só não sei o que estou perdendo, também tentei outros links mas se eu colocar tudo aqui vai ser uma longa pergunta.
Obrigado pelo seu tempo
Respostas
Pelo que você postou aqui, o problema não está muito claro. com os trechos que você postou, não podemos rastrear onde está o problema. é sempre melhor incluir o código mínimo para reproduzir o problema para que possamos encontrar facilmente uma solução para você e outras pessoas que possam topar com ela. mas vou tentar responder à sua pergunta de qualquer maneira.
algum arquivo blade com as bibliotecas necessárias carregadas welcome.blade.php
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap-select.min.css">
@livewireStyles
</head>
<body>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
Open Modal
</button>
<!-- Modal -->
//
<div wire:ignore.self class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true close-btn">×</span>
</button>
</div>
<div class="modal-body">
<!-- livewire component -->
<livewire:bootstrap-select-multiple />
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary close-btn" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap-select.min.js"></script>
@livewireScripts
<script>
$(function () { $('select').selectpicker();
});
</script>
</body>
</html>
Classe de componente Livewire: BootstrapSelectMultiple.php
<?php
use Livewire\Component;
class BootstrapSelectMultiple extends Component
{
public $customers = [];
public function render()
{
return view('bootstrap-select-multiple');
}
}
Visualização do componente Livewire: bootstrap-select-multiple.blade.php
<div>
<div class="" wire:ignore id="for-customers">
<select class="form-control show-tick" data-style="btn-primary" title="Select Customer..." multiple wire:model="customers" data-container="#for-customers" data-actions-box="true">
<option value="John Doe">John Doe</option>
<option value="Jane Doe">Jane Doe</option>
<option value="John Wick">John Wick</option>
</select>
</div>
<hr>
Customers List<br>
<ul>
@forelse($customers as $key => $value)
<li>{{$value}}</li><br>
@empty
Currently there are no selected customers.
@endforelse
</ul>
</div>
Playaround atualizado também BootstrapSelectMultiple e vê-lo em ação.