Blazor University (38)JavaScript 互操作 —— 從 .NET 調用 JavaScript

原文鏈接:https://blazor-university.com/javascript-interop/calling-javascript-from-dotnet/

從 .NET 調用 JavaScript

JavaScript 應添加到服務器端 Blazor 應用程序的 /Pages/_Host.cshtml 或 Web Assembly Blazor 應用程序的 wwwroot/index.html 中。

然后可以通過將 IJSRuntime 服務注入我們的組件來從 Blazor 調用我們的 JavaScript。

源代碼[1]

public?interface?IJSRuntime
{ValueTask<TValue>?InvokeAsync<TValue>(string?identifier,?object[]?args);ValueTask<TValue>?InvokeAsync<TValue>(string?identifier,?CancellationToken?cancellationToken,?object[]?args);//?Via?an?extension?classvoid?InvokeVoid(string?identifier,?params?object[]?args);
}

identifier 必須是作用域為全局 window 變量的 JavaScript 函數,但不必在標識符中包含 window。因此,要調用 window.alert,我們只需要指定 alert 作為標識符。

@page?"/"
@inject?IJSRuntime?JSRuntime<button?@onclick=ButtonClicked>Perform?interop</button>@code
{private?async?Task?ButtonClicked(){await?JSRuntime.InvokeVoidAsync("alert",?"Hello?world");}
}

98151229e5ec615578882b6526ddb593.png

傳遞參數

源代碼[2]

前面的示例將字符串“Hello world”作為參數傳遞給 JavaScript 警報函數。也可以將復雜對象傳遞給 JavaScript。參數被序列化為 JSON,然后在 JavaScript 中反序列化,然后作為匿名對象類型按值傳遞給被調用的函數。

傳遞給 JavaScript 的所有參數類型必須是基本類型(string / int / 等)或者是 JSON 可序列化的。

創建一個新的 Blazor 應用程序,并添加以下 Person 類。

using?System.Collections.Generic;namespace?PassingComplexObjectsToJavaScript.Models
{public?class?Person{public?string?Salutation?{?get;?set;?}public?string?GivenName?{?get;?set;?}public?string?FamilyName?{?get;?set;?}public?List<KeyValuePair<string,?string>>?PhoneNumbers?{?get;?set;?}public?Person(){PhoneNumbers?=?new?List<KeyValuePair<string,?string>>();}}
}

現在在我們的 Index.razor 頁面中創建一個 Person 實例并將其傳遞給 console.log

@page?"/"
@inject?IJSRuntime?JSRuntime<button?@onclick=ButtonClicked>Perform?interop</button>@code
{private?async?Task?ButtonClicked(){var?person?=?new?Models.Person{Salutation?=?"Mr",GivenName?=?"Chuck",FamilyName?=?"Morris"};person.PhoneNumbers.Add(new?KeyValuePair<string,?string>("Home",?"+44?(0)121?999?9999"));person.PhoneNumbers.Add(new?KeyValuePair<string,?string>("Work",?"+44?(0)161?999?9999"));await?JSRuntime.InvokeVoidAsync("console.log",?"Hello",?person);}
}

如果我們查看瀏覽器的控制臺輸出,我們應該在單擊按鈕時看到以下內容。

0ad33d1c9372704253b57188c1fdfbc2.png

訪問 JavaScript 返回值

源代碼[3]

到目前為止,我們只使用了 IJSRuntime 擴展方法 InvokeVoidAsync。如果我們想從 JavaScript 函數接收返回值,我們需要使用 InvokeAsync<TValue> 方法。在以下示例中,我們將調用標準 JavaScript 確認函數(返回布爾值)和提示函數(返回字符串)。

@page?"/"
@inject?IJSRuntime?JSRuntime<p>Status:?@Result
</p>
<p><button?@onclick=ShowConfirm>Confirm?popup</button>
</p>
<p><button?@onclick=ShowPrompt>Prompt?popup</button>
</p>@code
{private?string?Result;private?async?Task?ShowConfirm(){bool?confirmed?=?await?JSRuntime.InvokeAsync<bool>("confirm",?"Are?you?sure?");Result?=?confirmed???"You?clicked?OK"?:?"You?clicked?Cancel";}private?async?Task?ShowPrompt(){string?name?=?await?JSRuntime.InvokeAsync<string>("prompt",?"What?is?your?name?");Result?=?"Your?name?is:?"?+?name;}
}

參考資料

[1]

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

[2]

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

[3]

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284536.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284536.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284536.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

十大排序總結(js實現、穩定性、內外部排序區別、時間空間復雜度、冒泡、快速、直接選擇、堆、直接插入、希爾、桶、基數、歸并、計數排序)

目錄 排序相關概念 穩定性 內部排序 外部排序 十種排序算法特點總結 交換排序 冒泡排序&#xff08;數組sort方法的原理&#xff09; 圖解 js實現 特點 快速排序 圖解 js實現 特點 選擇排序 直接選擇排序 圖解 js實現 特點 堆排序 大&#xff08;小&#xff0…

三維重建技術概述

基于視覺的三維重建&#xff0c;指的是通過攝像機獲取場景物體的數據圖像&#xff0c;并對此圖像進行分析處理&#xff0c;再結合計算機視覺知識推導出現實環境中物體的三維信息。 1. 相關概念 &#xff08;1&#xff09;彩色圖像與深度圖像 彩色圖像也叫作RGB圖像&#xff0c;…

【ArcGIS微課1000例】0032:ArcGIS中河流(曲線)、湖泊(水體色)圖例制作案例教程

河流作為線要素,在符號化的過程中使用的大多都是直線符號,但是為了能夠在出圖的使用表現形象的河流對象,就有了使用曲線表示河流圖例的需求,湖泊亦是如此。本文講解在ArcGIS中制作標準的河流和湖泊圖例的完整教程。 文章目錄 一、案例效果二、圖例制作三、圖例修改一、案例…

從shiro源碼角度學習工廠方法設計模式

緒論 shiro是一個簡單易用&#xff0c;功能強大的Java安全框架&#xff0c;學習其源碼設計思想對我們的編碼水平的提高大有裨益。現在&#xff0c;就從源碼角度帶大家學習一下shiro里面的工廠方法模式。 這里的前提是讀者有過使用shiro的基礎&#xff0c;沒有也行&#xff0c;關…

淺談微信小程序對于房地產行業的影響

前幾日&#xff0c;我們曾經整理過一篇文章是關于微信小程序對于在線旅游業的影響的一些反思&#xff08;淺談微信小程序對OTA在線旅游市場的影響&#xff09;&#xff0c;近日由于生活工作的需要走訪了一些房地產的住宅商品房&#xff0c;突然想到微信小程序對于房地產行業會有…

新型基礎測繪與實景三維中國建設技術文件【1】名詞解釋

文章目錄一、新型基礎測繪 new fundamental surveying and mapping**二、實景三維 3D real scene**三、時空大數據平臺 spatio-temporal big data platform**四、地理實體 geo-entity**五、基礎地理實體 fundamental geo-entity**六、組合地理實體數據 combined geo-entity dat…

Android.bp 和 Android.mk 的對應關系

參考 Soong 構建系統 Android.mk 轉為 Android.bp 沒有分支、循環等流程控制的簡單的 Android.mk &#xff0c;可以通過 androidmk 命令轉化為 Android.bp source 、lunch 之后執行即可。 androidmk Android.mk > Android.bp對應關系 Android 13 &#xff0c;build/soon…

深入理解javascript原型和閉包

原文鏈接http://www.cnblogs.com/wangfupeng1988/p/3977924.html 對象是屬性的集合。 function show(x) {console.log(typeof(x)); // undefinedconsole.log(typeof(10)); // numberconsole.log(typeof(abc)); // stringconsole.log(typeof(true)); // booleanconsole.lo…

薪資高壓線

閱讀本文大概需要5分鐘。最近一名讀者咨詢一個問題&#xff1a;洋哥&#xff0c;最近公司有一名同事因為打探其他人薪資被開除了&#xff0c;為啥我們公司要把薪資設置為高壓線。這是個好問題&#xff0c;解答完他的疑惑后想起了一年多前寫過一篇&#xff0c;彼時讀者還比較少&…

達摩院年終預測出爐:2022 十大科技趨勢,AI for Science 高居榜首

作為“一所探索科技未知的研究院”&#xff0c;阿里巴巴達摩院成立至今已經四年了。 這四年來&#xff0c;達摩院秉持著“探索科技位置&#xff0c;以人類愿景為驅動力&#xff0c;開展基礎科學和顛覆式技術創新研究”的原則與使命&#xff0c;在基礎科研和硬科技發展上“遍地生…

chrome調試工具高級不完整使用指南(基礎篇)

一、前言 本文記錄的是作者在工作上面對chrome的一些使用和情況的分析分享&#xff0c;內容僅代表個人的觀點。轉發請注明出處(http://www.cnblogs.com/st-leslie/),謝謝合作 二、瀏覽器模塊介紹 由于chrome瀏覽器一直在不斷的進行更新迭代&#xff0c;會不斷的新增功能&#x…

新型基礎測繪與實景三維中國建設技術文件【2】基礎地理實體分類、粒度及精度基本要求

《新型基礎測繪體系建設試點技術大綱》指出&#xff0c;新型基礎測繪將以“基礎地理實體”為核心的成果模式創新為切入點&#xff0c;帶動技術體系、生產組織體系和政策標準體系的全面創新&#xff0c;從而實現基礎測繪高質量發展。 基礎地理實體作為新型基礎測繪產品體系的核心…

構建和實現單點登錄解決方案(轉載于IBMdeveloperWorks)

將一個開放源碼的基于 Java 的身份驗證組件集成進 Web 門戶中 在現有的應用程序中實現單點登錄解決方案&#xff08;single sign-on&#xff0c;SSO&#xff0c;即登錄一次&#xff0c;就可以向所有網絡資源驗證用戶的身份&#xff09;是非常困難的&#xff0c;但是在構建復雜的…

分享一個基于Abp 和Yarp 開發的API網關項目

這個項目起源于去年公司相要嘗試用微服務構建項目,在網關的技術選型中,我們原本確認了ApiSix 網關,如果需要寫網關插件需要基于Lua腳本去寫,我和另外一個同事當時基于這個寫了一個簡單的插件,但是開發測試以及發布都很麻煩,而且使用Lua腳本作為插件的開發語言本身也不是我們強項…

羅振宇2022“時間的朋友”跨年演講全文稿(pdf)

2021年12月31日20:30&#xff0c;五糧液成都金融城演藝中心&#xff0c;羅振宇“時間的朋友”跨年演講如約而至。 羅胖曾發下大愿望&#xff1a;跨年演講要連辦二十年。今年是第七場&#xff0c;也是最特殊的一場&#xff0c;羅胖面對12000個空座位&#xff0c;用53個好故事&am…

08.LoT.UI 前后臺通用框架分解系列之——多樣的Tag選擇器

LOT.UI分解系列匯總&#xff1a;http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI開源地址如下&#xff1a;https://github.com/dunitian/LoTCodeBase/tree/master/LoTUI 這個必須說下&#xff0c;本來是用Bootstrap-Select做的&#xff0c;很漂亮&#xff0c;正好…

jquery文檔加載完畢后執行的幾種寫法

2019獨角獸企業重金招聘Python工程師標準>>> 1.js文檔加載完畢 標簽內 οnlοad"test()"window.οnlοadfunction(){}2.jquery文檔加載完畢 //方式1 $(document).ready(function(){//TODO }); //方式2 $(function(){//TODO }) //方式3 $(function($){//TO…

新型基礎測繪與實景三維中國建設技術文件【3】基礎地理實體空間身份編碼規則

基礎地理實體是新型基礎測繪產品體系中的核心成果&#xff0c;是推動基礎測繪工作轉型升級的關鍵。與現有的測繪地理信息數據不同&#xff0c;基礎地理實體具有多粒度、多模態、多層次&#xff0c;以及搭載結構化、半結構化和非結構化多樣化信息的鮮明特點。 基礎地理實體空間…

oracle 表 視圖 存儲過程 序列 job

table 表--delete tabledrop table Test1;-- Create tablecreate table TEST1(ID NUMBER,T_NAME VARCHAR2(100),DT DATE);-- 添加注釋comment on column TEST1.T_NAME is 名稱;--添加age字段alter table Test1 add (age NUMBER(8));--刪除字段alter table TABLE_NAME …

[轉]Docker 大勢已去,Podman 即將崛起

Podman Podman 什么是Podman&#xff1f;Podman和Docker的主要區別是什么&#xff1f;Podman的使用與docker有什么區別&#xff1f;Podman 常用命令 容器鏡像部署 PodmanPodman 加速器使用 Podman 運行一個容器列出運行的容器檢查正在運行的容器查看一個運行中容器的日志查看一…