Laravel with Sweet Alert 安裝教學

前言

在這裡我會教你如何導入Sweetalert 進入你的專案, 比較常用的地方是當使用者要刪除項目的時候有一個確認的動作。這個動作可以提升使用者體驗。那我們就廢話不多說,開始教學把。

1. 先安裝 sweetalert

npm i sweetalert

2. 導入你的laravel 專案, 記得用laravel mix build一下

// app.js
const swal = (window.swal = require("sweetalert2"));

//layout.blade.php
// 確認你的專案有導入 javascript
<script src="{{ asset('js/app.js') }}"></script>

3. 然後在你的blade,測試一下看看有沒有導入成功

// blade.php
<script>
    swal.fire('Any fool can use a computer')
</script>

4. 成功後,規劃我們的刪除(delete)流程首先route web.php 把 delete改成get

// 原本
Route::delete('/purchase-orders/{purchase_order}', 'Procurement\[email protected]')->name('procurement-po-delete');

// 改成
Route::get('/purchase-orders/delete/{purchase_order}', 'Procurement\[email protected]')->name('procurement-po-delete');

5.然後在你的blade要改兩個地方, 第一個是把原本的delete方法改成get

// 原本
<form method="POST"
    action="{{ route('procurement-po-delete', ['purchase_order' => $purchase_order]) }}">
    @csrf
    {{ method_field('DELETE') }}
    <input type="submit" class=" text-red-500 font-medium ml-2" value="刪除" />
</form>

// 改成
<a href="/procurement/purchase-orders/delete/{{$purchase_order->id}}"
class="text-red-500 delete-confirm font-medium ml-2">刪除</a>

6. 然後在這一隻的blade 下方輸入 Javascript。我這邊是一個清單所以我的Javascript是用Array寫的。然後增加Event Listener。然後當使用者按下 Yes, Delete。的時候執行以下的promise function.

<script>
    var deleteBtns = document.getElementsByClassName('delete-confirm')
    var deleteBtnsArray = Array.prototype.slice.call(deleteBtns);

    deleteBtnsArray.forEach(function (deleteBtn) {
        deleteBtn.addEventListener('click', function (event) {
            event.preventDefault();
            const url = event.target.href
            console.log(url)
            swal.fire({
                title: 'Are you sure?',
                text: "You won't be able to revert this!",
                icon: 'warning',
                showCancelButton: true,
                confirmButtonColor: '#3085d6',
                cancelButtonColor: '#d33',
                confirmButtonText: 'Yes, delete it!'
            }).then((result) => {
                if (result.value) {
                    swal.fire(
                        'Deleted!',
                        'Your file has been deleted.',
                        'success'
                    )
                    window.location.href = url
                }
            })
        })
    })

</script>

這樣子就完成了。希望這篇文章有幫助到你。

資源

Delete confirmation Alert Dialog using Sweetalert in Laravel


關於作者:Danny Huang

大家好,我是Danny,是位熱愛程式的前端工程師,具有豐富工作與接案經驗。我在這裡會陸續推出一些網頁開發,線上行銷的文章。 如果喜歡這方面的文章可以加入email list。

2018 © Copyright 鎰誠 All rights Reserved.