0

laravel livewire を使用して 2 つのテーブルのレコードを削除しています。問題はモーダルです。レコードは削除されていますが、モーダルは引き続き表示されます。

奇妙なことに、データを削除するコード行の 1 つにコメントを付けると、それが機能します。

Bootstrap 4.1を使用しています

これは私の機能です:

    public function delete($id)
    {
        DB::beginTransaction();
        try 
        { 
            // If I comment on any of the following two lines (it doesn't matter what line it is), it works! 

            DetalleRamComputadora::where('fk_computadora', '=', $id)->delete();
            Computadora::where('id', '=', $id)->delete();

            DB::commit();
            $this->emit('confirm'); // Close modal "confirm"
            session()->flash('success', 'Registro eliminado con éxito');

        } catch (\Throwable $th) {
            DB::rollBack();
            $this->emit('confirm'); // Close modal "confirm"
            session()->flash('error', 'Ocurrió un error y no se almacenó el registro');
        }
    }

これは livewire からモーダルを閉じるスクリプトです:

window.livewire.on('confirm', () => {
     $('#delete_confirm').modal('hide');
}); 

お願い助けて!!

4

5 に答える 5

1

関数の削除で、ディスパッチ ブラウザー イベントを追加します。

public function delete($id)
{
        DB::beginTransaction();
        try 
        { 
            /*...Your code ... */
            $this->dispatchBrowserEvent('closeModal'); 

        } catch (\Throwable $th) {
            /*...Your code ... */
        }
}

app.blade.php に、このウィンドウ イベント リスナーを追加してみてください。

window.addEventListener('closeModal', event => {
     $("#delete_confirm").modal('hide');                
})

そうすれば、フロントエンドから JavaScript をトリガーしてモーダルを閉じることができます。

PS実際にCRUD機能にBoostrap Modalを使用するlaravel livewireチュートリアルのYouTubeビデオシリーズがあります。ここで見ることができます! https://www.youtube.com/watch?v=_DQi8TyA9hI

于 2020-09-15T09:02:56.930 に答える
1

まず第一に、それ#delete_confirmが実際にモーダルの名前であることを確認する方法がありません。次に、イベントconfirmがトリガーされているかどうかを確認します。

window.livewire.on('confirm', () => 
{
    alert('Yes, I have reached here');
}); 

イベントが発生している場合は、次のことを試してください。

window.livewire.on('confirm', () => 
{
    $('.modal').modal('hide');
}); 

それでもうまくいかない場合は、モーダルを強制的に完全に破棄します。

window.livewire.on('confirm', () => 
{
    $('.modal').modal('hide').data('bs.modal', null);
    $('.modal').remove();
    $('.modal-backdrop').remove();
    $('body').removeClass('modal-open');
    $('body').removeAttr('style');
}); 
于 2020-08-12T01:57:23.637 に答える
0

モーダル ポップアップに wire:ignore.self を追加する

<div wire:ignore.self class="" id="">
</div>
于 2021-09-15T03:21:32.707 に答える