日韩性视频-久久久蜜桃-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)组件 — 组件事件的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 夜夜骚av一区二区三区 | 国产精品永久免费 | 日本在线不卡一区二区 | 91麻豆免费看 | 久操视频在线免费观看 | 在线国产视频一区 | 51久久久| 久久国产视频播放 | 日韩在线免费视频观看 | 日本三级中文 | 日少妇av| 国偷自产视频一区二区久 | 免费看黄色av | 天堂网www.| 亚洲精品视频大全 | 性色av蜜臀av色欲av | 999精品国产| 亚洲影视网 | 国产精品23p | 美女脱了裤子让男人桶 | 日韩xxx高潮hd | 在线免费看毛片 | 亚洲成人天堂 | www久久久久久久 | www.午夜视频 | 亚洲人成无码网站久久99热国产 | 一级片视频播放 | 老司机午夜在线 | 91视频社区| 91国内视频 | 中文字幕91爱爱 | a视频在线免费观看 | 777四色| 蜜桃一区二区三区 | 精品人妻一区二区三区麻豆91 | 日韩精品2区 | 国产三级做爰高清在线 | 樱花动漫无圣光 | 日韩一区二区三区精 | a成人在线 | 欧美日韩一区二区三区在线观看 | 午夜影院福利 | 自拍偷拍色综合 | 国产在线精品福利 | 欧美xxxxx自由摘花 | 中文字幕乱码在线 | 久久婷婷视频 | 久久久久久久久综合 | 精品午夜福利视频 | √资源天堂中文在线视频 | 日本久久一区二区 | 公侵犯人妻一区二区三区 | 国产一伦一伦一伦 | 日韩精品中文字幕一区二区 | 99久久精品无免国产免费 | 国产黄色网 | 成年人黄色录像 | 久久久黄色 | 日本少妇与黑人 | 俺也去婷婷 | 加勒比在线一区 | 91在线观 | 日日爱夜夜操 | 国语av在线 | 欧美日韩片 | 网站免费在线观看 | 美女脱光衣服让男人捅 | 久久久av免费 | 超碰在线视屏 | 久久久久久免费观看 | 神马久久久久久久久 | 久久精品视频在线 | 丰满秘书被猛烈进入高清播放在 | 亚洲精品激情 | 夜晚福利| 蜜桃久久精品成人无码av | av中文在线观看 | 日本久色 | 一区二区乱码 | 日日躁夜夜躁aaaabbbb | 青青国产精品视频 | 欧美精品v国产精品v日韩精品 | 最新日韩三级 | 亚洲图片欧美视频 | 精品人妻一区二区三区久久夜夜嗨 | 日韩大片免费在线观看 | 国产一区二区三区免费看 | 亚洲精品久久久中文字幕痴女 | 精品日韩欧美 | 在线成人日韩 | 日韩美女性生活 | 日本一本视频 | 免费视频成人 | 中文字幕视频网站 | 顶臀精品视频www | 天天操天天干天天 | 国产不卡av在线 | 我把护士日出水了视频90分钟 | 五月天狠狠操 |