深入淺出Blazor webassembly之modal對話框


=============================================

 Blazored.Moda 簡介

=============================================

本文介紹 Blazored 發布的 Modal 組件, 可以不使用JS就能實現Modal 對話框效果.

主頁: https://github.com/Blazored/Modal

demo 站點:  https://blazored.github.io/Modal/

 

Blazored.Modal 組件可以將一個普通的 razor 組件以 Modal 的形態展現出來, 比如 FetchData 這個 razor 組件, 下面簡單的代碼就會將 FetchData 以彈窗形式顯示.

Modal.Show<FetchData>("這是一個彈窗");

 

 

=============================================

 使用步驟

=============================================

1. 安裝

   dotnet add package Blazored.Modal

2.  program.cs 文件注冊服務

    builder.Services.AddBlazoredModal();

3.  index.html 引入相關 js 和 css

<link href="_content/Blazored.Modal/blazored-modal.css" rel="stylesheet" />
<script src="_content/Blazored.Modal/blazored.modal.js"></script>

4.  [可選]  _Imports.razor 文件using 相關的namespace

@using Blazored.Modal
@using Blazored.Modal.Services

5. [可選] App.razor 文件最外層包一個 <CasadingBlazoredModal> 組件, 這個組件類似於 CascadingValue 組件, 可以下推  ModalService 實例到下層要顯示彈窗的組件中, 如果省略了這一步, 下層組件需要使用常規的 inject 方法獲取一個 IModalService 實例中.

使用<CasadingBlazoredModal> 寫法的優勢是, 可以在 App.razor 中統一彈窗的一些表現, 比如禁止顯示右上角的close按鈕等等.

<CascadingBlazoredModal HideCloseButton="true" DisableBackgroundCancel="true" >

app.razor的原有內容

</CascadingBlazoredModal>

6. 需要彈窗的組件中, 使用 Inject 或 CasadingParameter 獲取一個 IModalService 實例, 然后調用 IModalService.Show<T>()來展現模態窗口

7. 彈窗組件中, 使用 CasadingParameter 獲取一個 BlazorModalInstance 實例, 通過該實例向外界傳遞 ModalResult 值.

 

=============================================

 IModalService.Show<T>()的參數和返回值

=============================================

1. ModalOptions 輸入參數, 可以控制:

  • 是否隱藏右上角的close按鈕
  • 是否可以通過點擊背景關閉彈窗
  • 是否隱藏標題欄

2. ModalParameters 參數

  對於razor組件,  父組件可以在嵌入它時, 同時設置Parameter參數.

  ModalService.Show<T>()函數也允許為彈窗組件傳參, 就是通過 ModalParameters 完成的.

3. 獲取ModalResult的方法

  彈窗組件中, 使用 CasadingParameter 獲取一個 BlazorModalInstance 實例, 通過該實例向外界傳遞 ModalResult 值.

 

=============================================

完整示例

=============================================

彈窗Fetch.razor 組件

<!-- 省略其他頁面代碼-->
<button @onclick="OkClick" class="btn btn-primary">OK</button>
<button @onclick="CancelClick" class="btn btn-secondary">Cancel</button>

@code{
    //省略其他C#代碼

    [Inject]BlazoredModalInstance ModalInstance { get; set; }

    private void OkClick()
    {
        ModalInstance.CloseAsync(ModalResult.Ok<String>("Yes"));

    }

    private void CancelClick()
    {
        ModalInstance.CloseAsync(ModalResult.Cancel());
    }
}

 

 index.razor 組件

@page "/"
<h1>Hello, world!</h1>

Welcome to your new app.
<br /> 

<button @onclick="ShowModal">show modal </button>
 
<SurveyPrompt Title="How is Blazor working for you?" />

@code{
    [CascadingParameter] protected IModalService ModalService { get; set; }

    private async void ShowModal()
    {
        Console.WriteLine("ShowModal");
        var formModal=ModalService.Show<FetchData>("這是一個彈窗");
        var result = await formModal.Result;
        if (result.Cancelled)
        {
            Console.WriteLine("Cancelled");
        }
        else
        {
            Console.WriteLine(result.Data);
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM