日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Blazor University (6)组件 — 组件事件

發布時間:2023/12/4 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Blazor University (6)组件 — 组件事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接:https://blazor-university.com/components/component-events/

組件事件

源代碼[1]

EventCallback<T> 類是一個特殊的 Blazor 類,可以作為參數公開,以便組件可以在發生感興趣的事情時輕松通知使用者。

一旦聲明了 EventCallback<T> 類型的公共屬性并使用 [Parameter] 屬性進行了修飾,使用組件就可以在 Razor 標記中指定觸發事件時要調用的方法。

向 Counter 組件添加事件

在新的 Blazor 應用中,編輯 /Pages/Counter.razor 文件并添加新的回調參數。

[Parameter] public?EventCallback<int>?OnMultipleOfThree?{?get;?set;?}

這聲明了一個名為 OnMultipleOfThree 的新 EventCallback,任何使用組件都可以注冊它。<int> 指定事件回調發出的值將是 System.Int32。

現在,如果我們編輯 IncrementCount 方法,我們可以在計數器增加到 3 的倍數時發出此事件。

private?async?Task?IncrementCount() {currentCount++;if?(currentCount?%?3?==?0)await?OnMultipleOfThree.InvokeAsync(currentCount); }

訂閱 EventCallback

編輯 /Pages/Index.razor 頁面,以便我們嵌入 Counter 組件并訂閱其 OnMultipleOfThree 事件。將其標記更改為以下內容。

@page?"/"Last?multiple?of?three?=?@LastMultipleOfThree<Counter?OnMultipleOfThree=@UpdateLastMultipleOfThreeValue/>@code {int?LastMultipleOfThree?=?0;private?void?UpdateLastMultipleOfThreeValue(int?value){LastMultipleOfThree?=?value;} }
  • 第 9 行

    聲明一個 int 類型的類成員,它存儲 3 值的最后一個倍數。

  • 第 3 行

    顯示 LastMultipleOfThree 的值

  • 第 5 行

    嵌入 Counter 組件并設置其 OnMultipleOfThree 事件以在發出事件時執行 UpdateLastMultipleOfThreeValue 方法。

  • 第 11 行

    從事件接收到的值用于更新 LastMultipleOfThree 的值。

EventCallback和 .NET 事件之間的區別

單播與多播

最顯著的區別是 EventCallback<T> 是單播事件處理程序,而 .NET 事件是多播。Blazor EventCallback<T> 旨在分配單個值,并且只能回調單個方法。

//?Setting?a?Blazor?EventCallback <MyComponent?SomeEvent=@MyMethodToCall/>//?Setting?a?.NET?event MyComponent.SomeEvent?+=?MyMethodToCall; //?Unscrubscribing?from?the?event MyComponent.SomeEvent?-=?MyMethodToCall;

類與結構

.NET 事件(委托)是類,而 Blazor EventCallback<T> 是只讀結構。與 .NET 委托不同,EventCallback<T> 不能為 null,因此在發出事件時無需進行任何 null 檢查。

//?Invoking?a?.NET?event MyNetEvent?.Invoke(this,?someValue);//?Invoking?a?CallbackEvent<T> MyEventCallback.InvokeAsync(someValue);

等待回調

標準 .NET 事件是同步的,而 Blazor EventCallback<T> 是異步的。正如我們在前面的示例代碼中看到的,EventCallback<T>.InvokeAsync 返回一個可以等待的 Task。

Razor 標記兼容性

無法使用 [Parameter] 裝飾標準 .NET 事件并通過 Razor 標記設置它,而使用 EventCallback<T> 可以。這使我們能夠在視圖標記本身中表達事件回調,這使得開發人員的意圖更容易看到。

自動狀態變化檢測

每當從 EventCallback<T> 調用方法時,在方法執行后,Blazor 將在使用組件上執行 StateHasChanged(),以便在方法調用更改狀態時重新渲染它。如果使用者的方法是通過標準 .NET 事件、Action或不是由 EventCallback<T> 發起的任何其他方法回調的,則不會發生這種情況。

例如,如果我們將一個新的 [Parameter] 添加到 Action<int> 類型的 Counter 組件中,并在當前計數是 2 的倍數時調用它,我們可以看到使用組件的渲染行為是如何受到影響的。

更改 Counter 組件以匹配以下代碼:

@page?"/counter"<h1>Counter</h1><p>Current?count:?@currentCount</p><button?class="btn?btn-primary"?@onclick=IncrementCount>Click?me</button>@code?{private?int?currentCount?=?0;[Parameter]public?Action<int>?OnMultipleOfTwoAction?{?get;?set;?}[Parameter]public?EventCallback<int>?OnMultipleOfThree?{?get;?set;?}private?async?Task?IncrementCount(){currentCount++;if?(currentCount?%?2?==?0)OnMultipleOfTwoAction?.Invoke(currentCount);if?(currentCount?%?3?==?0)await?OnMultipleOfThree.InvokeAsync(currentCount);} }
  • 第 13 行

    添加了 Action<int> 類型的 [Parameter]

  • 第 21-22 行

    如果當前計數是 2 的倍數,則調用 OnMultipleOfTwoAction

現在更改 Index 組件,使其在值為 2 的倍數時設置回調方法,因此它也會存儲并顯示從 OnMultipleOfTwoAction 接收到的最后一個數字在使用的組件上。

@page?"/"<ul><li>Last?multiple?of?two?=?@LastMultipleOfTwo</li><li>Last?multiple?of?three?=?@LastMultipleOfThree</li> </ul><Counter?OnMultipleOfThree=@UpdateLastMultipleOfThreeValue?OnMultipleOfTwoAction=@UpdateLastMultipleOfTwoValue?/>@code {int?LastMultipleOfTwo?=?0;int?LastMultipleOfThree?=?0;private?Task?UpdateLastMultipleOfThreeValue(int?value){LastMultipleOfThree?=?value;return?Task.CompletedTask;}private?void?UpdateLastMultipleOfTwoValue(int?value){LastMultipleOfTwo?=?value;} }
  • 第 13 行

    定義一個新成員來存儲從使用組件傳遞的最新“二的倍數”值

  • 第 4 行

    在用戶界面中顯示 LastMultipleOfTwo 的值

  • 第 9 行

    在使用的組件上設置 OnMultipleOfTwo 以便在當前值是 2 的倍數時通知我們的組件

  • 第 24 行

    記錄使用組件通知我們的最后 2 的倍數

當我們現在運行應用程序并多次單擊按鈕時,我們會看到當通過 Action<int> 回調 UpdateLastMultipleOfTwoValue 時,視圖沒有更新,但是當下一次單擊通過 EventCallback<int> 回調 UpdateLastMultipleOfThreeValue 時,視圖更新并顯示兩者的最新值。

事件順序點擊計數回調執行使用者重新渲染
1N/A
2Action<int>No
3Action<int> EventCallback<int>Yes
4Action<int>No
5NoneN/A
6Action<int> ?EventCallback<int>Yes

EventCallback<T> 通常回調帶有簽名 private Task SomeName(T value)的方法——其中方法的暴露級別并不重要。但是,Blazor 將允許我們設置一個 EventCallback<T> 來回調具有幾個變體的方法。

如果我們的方法不執行任何異步操作,那么下面的實現可能會開始變得乏味:

public?Task?SomethingHappenedInChildComponent(string?value) {//?Do?something?with?valuereturn?Task.CompletedTask; }

因此,Blazor 將允許我們設置 EventCallback<T> 以回調具有 void 返回類型的方法。

public?void?SomethingHappenedInChildComponent(string?value) {//?Do?something?with?value }

有時我們只想知道一個事件何時發生,而不是對它傳遞的值感興趣。Blazor 還將回調一個排除 value 參數的方法。

//?Either public?void?SomethingHappenedInChildComponent() {//?Do?something?that?doesn't?need?the?value }//?Or public?Task?SomethingHappenedInChildComponent() {//?Do?some?asynchronous?work?that?doesn't?need?the?valuereturn?SomeTask; }

瀏覽器 DOM 事件

呈現任何標記時,可以在呈現的 HTML 元素上分配標準 JavaScript 事件,以便執行我們自己的 Blazor C# 方法。例如,我們在其他地方的許多示例中使用了 @onclick 指令:

<button?@onclick=ButtonClicked>Click?me</button>

這些事件指令在 Visual Studio 編輯器中具有完整的 IntelliSense 支持,因此開始鍵入 @ 符號應該會為我們提供可用指令的完整列表,以及標識事件在我們的事件處理程序中傳遞給我們的參數類類型的描述。DOM 事件以 @on 開頭。

將“@onabort”屬性設置為提供的字符串或委托值。委托值應為“Microsoft.AspNetCore.Components.Web.ProgressEventArgs”類型

警告:在編寫完全在服務器上運行的 Blazor 應用程序時,Blazor 將 hook 瀏覽器中的事件并將它們發送到服務器,以便可以調用我們的 C# 方法。這可能會導致頻繁觸發的事件(例如 onmousemove)明顯變慢。

注意: 因為 C# 方法的 JavaScript 調用是異步的,這意味著在 C# 方法中我們不能像在 JavaScript 中那樣取消事件。這是因為取消瀏覽器 DOM 事件是一個同步操作,當我們的 C# 被異步調用時,取消事件已經太遲了。

可用的 DOM 事件及其參數類型包括:

一般事件

DOM 事件參數類型
onactivateEventArgs
onbeforeactivateEventArgs
onbeforedeactivateEventArgs
ondeactivateEventArgs
onendedEventArgs
onfullscreenchangeEventArgs
onfullscreenerrorEventArgs
onloadeddataEventArgs
onloadedmetadataEventArgs
onpointerlockchangeEventArgs
onpointerlockerrorEventArgs
onreadystatechangeEventArgs
onscrollEventArgs

焦點事件

DOM 事件參數類型
onfocusFocusEventArgs
onblurFocusEventArgs
onfocusinFocusEventArgs
onfocusoutFocusEventArgs

鼠標事件

DOM 事件參數類型
onmouseoverMouseEventArgs
onmouseoutMouseEventArgs
onmousemoveMouseEventArgs
onmousedownMouseEventArgs
onmouseupMouseEventArgs
onclickMouseEventArgs
ondblclickMouseEventArgs
oncontextmenuMouseEventArgs
onwheelWheelEventArgs
onmousewheelWheelEventArgs

拖動事件

DOM 事件參數類型
ondragDragEventArgs
ondragendDragEventArgs
ondragenterDragEventArgs
ondragleaveDragEventArgs
ondragoverDragEventArgs
ondragstartDragEventArgs
ondropDragEventArgs

鍵盤事件

DOM 事件參數類型
onkeydownKeyboardEventArgs
onkeyupKeyboardEventArgs
onkeypressKeyboardEventArgs

輸入事件

DOM 事件參數類型
onchangeChangeEventArgs
oninputChangeEventArgs
oninvalidEventArgs
onresetEventArgs
onselectEventArgs
onselectstartEventArgs
onselectionchangeEventArgs
onsubmitEventArgs

剪貼板事件

DOM 事件參數類型
onbeforecopyEventArgs
onbeforecutEventArgs
onbeforepasteEventArgs
oncopyClipboardEventArgs
oncutClipboardEventArgs
onpasteClipboardEventArgs

觸摸事件

DOM 事件參數類型
ontouchcancelTouchEventArgs
ontouchendTouchEventArgs
ontouchmoveTouchEventArgs
ontouchstartTouchEventArgs
ontouchenterTouchEventArgs
ontouchleaveTouchEventArgs

指針事件

DOM 事件參數類型
ongotpointercapturePointerEventArgs
onlostpointercapturePointerEventArgs
onpointercancelPointerEventArgs
onpointerdownPointerEventArgs
onpointerenterPointerEventArgs
onpointerleavePointerEventArgs
onpointermovePointerEventArgs
onpointeroutPointerEventArgs
onpointeroverPointerEventArgs
onpointerupPointerEventArgs

多媒體事件

DOM 事件參數類型
oncanplayEventArgs
oncanplaythroughEventArgs
oncuechangeEventArgs
ondurationchangeEventArgs
onemptiedEventArgs
onpauseEventArgs
onplayEventArgs
onplayingEventArgs
onratechangeEventArgs
onseekedEventArgs
onseekingEventArgs
onstalledEventArgs
onstopEventArgs
onsuspendEventArgs
ontimeupdateEventArgs
onvolumechangeEventArgs
onwaitingEventArgs

進度事件

DOM 事件參數類型
onloadstartProgressEventArgs
ontimeoutProgressEventArgs
onabortProgressEventArgs
onloadProgressEventArgs
onloadendProgressEventArgs
onprogressProgressEventArgs
onerrorErrorEventArgs

參考資料

[1]

源代碼: https://github.com/mrpmorris/blazor-university/tree/master/src/Components/EventCallbacks

總結

以上是生活随笔為你收集整理的Blazor University (6)组件 — 组件事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美tv| 国产福利在线视频 | 免费在线黄| 日韩国产欧美视频 | 打白嫩屁屁网站视频短裙 | 精品久久国产视频 | 欧美日韩一区二区视频观看 | 少妇又色又爽又黄的视频 | 成人宗合网| 日韩有色 | 91精品999| 日韩精品二区在线观看 | 国产一区二区三区四 | 天堂精品 | 一线毛片 | 国产精品日韩欧美大师 | 91看片免费 | 在线观看av网站 | 精品乱码一区二区三区四区 | 一级特黄bbbbb免费观看 | 污版视频在线观看 | 欧美日韩亚洲在线 | 欧美日韩一区二区区 | 欧美自偷自拍 | 国产经典一区二区三区 | 亚洲av区无码字幕中文色 | 亚洲春色一区二区三区 | www.精品视频 | 亚洲永久无码精品 | 亚洲精选一区 | 精品人妻无码一区二区三区换脸 | 嫩草网站 | 天天射寡妇射 | 国产日韩在线观看一区 | 丁香婷婷综合激情五月色 | 91国产网站| 伊人国产在线观看 | 少妇4p| 日本一区二区久久 | 一区二区精品视频 | 九色视频自拍 | 欧美韩国日本一区 | 精品国产av鲁一鲁一区 | 三级免费毛片 | 91性高潮久久久久久久久 | 17草在线 | 亚洲精品中文字幕乱码无线 | 97夜夜| 春宵av| 视频区小说区图片区 | 噜噜噜亚洲色成人网站 | 日韩专区中文字幕 | 日美av| 色女孩综合 | 欧美一级免费在线 | 天天想你在线观看完整版电影高清 | 久久性av | 亚洲视频手机在线观看 | 精品黑人一区二区三区观看时间 | 欧美一级黄视频 | 九热视频在线观看 | 麻豆视频在线观看免费网站 | 精品一区二区三区在线播放 | 三级艳丽杨钰莹三级 | 人人射人人干 | 尼姑福利影院 | 99国产精品一区二区三区 | 久久综合网址 | 久久久久久黄 | 超碰在线免费 | 大陆熟妇丰满多毛xxxⅹ | 男人的天堂久久久 | 亚洲の无码国产の无码步美 | www.av网址 | 日本人妖网站 | 日本中文字幕高清 | 911看片 | 欧美日韩综合精品 | 欧美视频一区二区在线 | 中文在线最新版天堂8 | 亚洲一区免费看 | 亚洲中文字幕一区 | www.久久综合 | 无遮挡边吃摸边吃奶边做 | 特大黑人娇小亚洲女 | 精品国产无码一区二区 | 欧美日韩亚洲视频 | 中文字幕一区二区三区在线观看 | 久久噜噜色综合一区二区 | 在线1区 | 国产一级伦理片 | 日韩欧美网 | 美女被揉胸视频 | 91免费网站入口 | av片免费| 91精品久久久久久久久久 | 久艹在线观看视频 | 日韩在线观看免费高清 | 色站在线 |