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.mzph.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中制作标准的河流和湖泊图例的完整教程。 文章目录 一、案例效果二、图例制作三、图例修改一、案例…

浅谈微信小程序对于房地产行业的影响

前几日&#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…

深入理解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 运行一个容器列出运行的容器检查正在运行的容器查看一个运行中容器的日志查看一…

基于Kubernetes v1.24.0的集群搭建(一)

一、写在前面 K8S 1.24作为一个很重要的版本更新&#xff0c;它为我们提供了很多重要功能。该版本涉及46项增强功能&#xff1a;其中14项已升级为稳定版&#xff0c;15项进入beta阶段&#xff0c;13项则刚刚进入alpha阶段。此外&#xff0c;另有2项功能被弃用、2项功能被删除。…

思科三层交换机充当路由器实现全网互通

转载于:https://blog.51cto.com/13568840/2059797