Livewire - Bootstrap เลือกไม่แสดงผล

Aug 22 2020

ฉันกำลังจัดโครงสร้างเป็นเวลาหลายชั่วโมงในเรื่องนี้ดูเหมือนว่าฉันไม่สามารถทำให้ bootstrap-select ทำงานภายในส่วนประกอบ livewire ได้ดังนั้นฉันจะพยายามเจาะจงสถานการณ์ของฉันและการกระโดดใครสักคนจะช่วยฉันได้ ฉันมีโครงการ laravel ที่ใช้adminlte นี้ดังนั้นรหัสของฉันคือ:

web.php

Route::livewire('/new','new')->layout('adminlte::page');

จากนั้นฉันมีหน้าของฉันAโดยที่ฉันรวมส่วนประกอบ livewire ซึ่งเป็นวิธีการบูตสแตรป

@livewire('new')

ภายใน app.scss ของฉันฉันมี: (ฉันติดตั้ง bootstrap เลือกด้วย npm)

// Bootstrap
@import '~bootstrap/scss/bootstrap';
@import '~bootstrap-select/sass/bootstrap-select.scss';

และภายใน app.js ของฉันฉันมี:

require('./bootstrap');
require('../../node_modules/bootstrap-select/dist/js/bootstrap-select');

หลังจากนี้ฉันไปที่ไฟล์ livewire blade ของฉันและพยายามใช้ตัวอย่าง 'เลือก / ยกเลิกการเลือกตัวเลือกทั้งหมด:

<select class="selectpicker" multiple data-actions-box="true">
  <option>Mustard</option>
  <option>Ketchup</option>
  <option>Relish</option>
</select>

แต่ไม่มีอะไรเกิดขึ้นฉันจึงค้นพบลิงค์นี้และใช้วิธีแก้ปัญหาที่ให้มา แต่ผลลัพธ์ก็เหมือนกัน

ใครช่วยชี้ทางที่ถูกต้องให้ฉันได้ไหม ฉันไม่รู้ว่าฉันพลาดอะไรฉันลองใช้ลิงค์อื่น ๆ ด้วย แต่ถ้าฉันใส่ทุกอย่างไว้ที่นี่มันจะเป็นคำถามที่ยาว

ขอบคุณสำหรับเวลา

คำตอบ

BezhanSalleh Aug 25 2020 at 11:51

จากสิ่งที่คุณโพสต์ที่นี่ปัญหายังไม่ชัดเจนนัก ด้วยตัวอย่างข้อมูลที่คุณโพสต์เราไม่สามารถติดตามได้ว่าปัญหาอยู่ที่ใด เป็นการดีที่สุดที่จะรวมโค้ดขั้นต่ำเพื่อทำให้เกิดปัญหาซ้ำเพื่อให้เราสามารถหาทางแก้ปัญหาสำหรับคุณและคนอื่น ๆ ที่อาจสะดุด แต่ฉันจะปล่อยมันไปและตอบคำถามของคุณต่อไป

ไฟล์เบลดบางไฟล์ที่มีไลบรารีที่จำเป็นโหลด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>

Livewire Component Class: BootstrapSelectMultiple.php

<?php

use Livewire\Component;

class BootstrapSelectMultiple extends Component
{
    public $customers = [];
  
    public function render()
    {
        return view('bootstrap-select-multiple');
    }
}

Livewire Component View: 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 อัปเดตเช่นกันBootstrapSelectMultipleและดูการทำงาน