выпадающий список alpine js неправильно отображается внутри компонента livewire

#laravel #laravel-livewire #alpine.js

Вопрос:

У меня есть компонент livwire , который визуализирует таблицу, внутри таблицы у меня есть раскрывающийся список alpine, у меня есть еще один компонент, чтобы добавить сводку, после чего я создаю событие, чтобы попросить компонент livewire повторно открыть страницу, но раскрывающийся компонент alpine js не является свойством визуализации.

спасибо, у меня были проблемы со стрельбой, похоже, проблемы с dom diff

1, Я добавил уникальный ключ к элементу таблицы td (проблема сохраняется)

2, оберните @if внутри тега div (проблема сохраняется)

PS: Я пытаюсь заменить выпадающий компонент на простую кнопку, она работает, это действительно проблема с выпадающим списком ??

вы можете обратиться к видео ниже: https://andiliang.sgp1.digitaloceanspaces.com/Laravel — Google Chrome 2021-09-05 22-16-12.mp4

версия livewire : «живой провод/живой провод»: «^2.5» версия alpinejs : «alpinejs»: «^3.0.0»,

мое представление таблицы индексов категорий

 <div class="py-4">

    <div>

    @if( $categories->isNotEmpty() )

    <div class="mb-10">
        <x-button.circular-btn
            @click.prevent="$dispatch('open-modal')"
            class="bg-gradient-to-b from-green-400 to-blue-600"
        >
            <x-svg.plus-outline class="h-6 w-6"  />
        </x-button.circular-btn>
    </div>

    <x-admin.table.table-view>
        <x-admin.table.table class="mb-20">
            <x-slot name="thead">
                <x-admin.table.th>Name</x-admin.table.th>
                <x-admin.table.th># of Products</x-admin.table.th>
                <x-admin.table.th>Created At</x-admin.table.th>
                <x-admin.table.th>Updated At</x-admin.table.th>
                <x-admin.table.th is-to-do="true">
                    <span class="sr-only">To Do Button</span>
                </x-admin.table.th>
            </x-slot>

            @foreach( $categories as $category)
                <tr class="  bg-white "  wire:key="table{{ $loop->index }}">

                    <x-admin.table.td is-first="true">
                        {{$category->name}}
                    </x-admin.table.td>

                    <x-admin.table.td>
                        {{$category->product_counts}}
                    </x-admin.table.td>

                    <x-admin.table.td>
                        {{$category->created_at->format('Y-m-d H:m')}}
                    </x-admin.table.td>

                    <x-admin.table.td>
                        {{$category->updated_at->diffForHumans()}}
                    </x-admin.table.td>



                    <x-admin.table.td is-to-do="true" >
                        <x-admin.dropdown wire:key="dd{{ $loop->index }}">
                            <x-slot name="trigger">
                                <button  type="button"
                                        class="bg-gray-100 rounded-full flex items-center text-gray-400 hover:text-gray-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-100 focus:ring-indigo-500"
                                        id="menu-button" aria-expanded="true" aria-haspopup="true">
                                    <span class="sr-only">Open options</span>
                                    <x-svg.dots-vertical class="h-5 w-5"/>
                                </button>
                            </x-slot>

                            <x-slot name="content">
                                <div class="py-1" role="none">
                                    <!-- Active: "bg-gray-100 text-gray-900", Not Active: "text-gray-700" -->
                                    @livewire('category-update' , [ 'category' => $category] ,  key('update'.$category->id) )
                                </div>

                                <div class="py-1" role="none">
                                    <a href="#" class="text-gray-700 group flex items-center px-4 py-2 text-sm"
                                       role="menuitem" tabindex="-1" id="menu-item-6">
                                        <x-svg.solid-trash class="mr-3 h-5 w-5 text-gray-400 group-hover:text-gray-500"/>
                                        Delete
                                    </a>
                                </div>

                            </x-slot>
                        </x-admin.dropdown>

                    </x-admin.table.td>

                </tr>

            @endforeach

        </x-admin.table.table>
    </x-admin.table.table-view>

    <div class="mt-10">
        {{ $categories->links() }}
    </div>

    @else
        <div class="mt-10" x-data="">
            <x-empty-states.simple title="category" description="get start by creating a category">
                <x-button.icon-on-the-left-btn @click.prevent="$dispatch('open-modal')">
                    <x-svg.plus-solid class="-ml-1 mr-2 h-5 w-5" />
                    New Category
                </x-button.icon-on-the-left-btn>
            </x-empty-states.simple>
        </div>
    @endif
    </div>


    <x-modal.modal >
        @livewire('category-store')
    </x-modal.modal >

</div>
 

компонент живого провода с индексом моей категории

 <?php

namespace AppHttpLivewire;

use AppModelsCategory;
use LivewireComponent;
use LivewireWithPagination;

class CategoryIndex extends Component
{

    use WithPagination;

    private $categories;
    protected $listeners = [
        'categoryUpdated' => 'load',
        'categoryCreated' => 'load'
    ];


    public function load()
    {
        return Category::withProductsCount()->latest('product_counts')->paginate(10);
    }

    public function mount()
    {
        $this->categories = $this->load();
    }

    public function render()
    {
        return view('livewire.category-index',[
            'categories' => $this->load(),
        ]);
    }
}
 

alpine js dropdown component

 <div
    x-data="{isOpen: false}"
    @close-dropdown.window="isOpen = false"
    class="relative inline-block text-left"
>

    <div @click="isOpen = !isOpen " >

        {{$trigger}}
    </div>

    <div
        x-cloak
        x-show="isOpen == true"
        @click.away="isOpen = false"
        x-transition:enter="transition ease-out duration-100"
        x-transition:enter-start="transform opacity-0 scale-95"
        x-transition:enter-end="transform opacity-100 scale-100"
        x-transition:leave="transition ease-in duration-75"
        x-transition:leave-start="transform opacity-100 scale-100"
        x-transition:leave-end="transform opacity-0 scale-95"
        class="z-10 origin-top-right absolute right-0 mt-2 w-56 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5 divide-y divide-gray-100 focus:outline-none"
        role="menu"
        aria-orientation="vertical"
        aria-labelledby="menu-button"
        tabindex="-1"
    >

        {{$content}}
    </div>
</div>
 

liveewire is a very cool but encounter those dom diff issue is very frustrating, hopefully someone has more advance knowledge can assist me out thanks very much!