首页 > 编程语言 >第十章-JavaScript 互操作性

第十章-JavaScript 互操作性

时间:2022-09-04 14:36:36浏览次数:79  
标签:10 互操作性 JavaScript 第十章 组件 添加 清单 using

从 C# 调用 JavaScript

浏览器具有许多您可能希望在 Blazor 网站中使用的功能。 例如,您可能希望使用浏览器的本地存储来跟踪某些数据。由于 Blazor 的 JavaScript 互操作性,这很容易。

提供胶水功能

要调用 JavaScript 功能,首先要在 JavaScript 中构建粘合函数。我喜欢将这些函数称为粘合函数(我自己的命名约定),因为它们成为 .NET 和 JavaScript 之间的粘合剂。

Glue 函数是常规的 JavaScript 函数。 JavaScript 粘合函数可以采用任意数量的参数,条件是它们是 JSON 可序列化的(这意味着您只能使用可转换为 JSON 的类型,包括其属性是 JSON 可序列化的类)。 这是必需的,因为参数和返回类型在 .NET 和 JavaScript 运行时之间作为 JSON 发送。

然后将此函数添加到 JavaScript 全局范围对象,在浏览器中该对象是窗口对象。 稍后您将查看一个示例,因此请继续阅读。 然后,您可以从 Blazor 组件调用此 JavaScript 粘合函数。

使用 IJSRuntime 调用 Glue 函数

回到 .NET 领域。 要从 C# 调用 JavaScript 粘合函数,请使用通过依赖注入提供的 .NET IJSRuntime 实例。 此实例具有 InvokeAsync 泛型方法,该方法采用胶水函数的名称及其参数并返回 T 类型的值,这是胶水函数的 .NET 返回类型。 如果您的 JavaScript 方法不返回任何内容,那么还有 InvokeVoidAsync 方法。 如果这听起来令人困惑,您将立即查看一个示例。

InvokeAsync 方法是异步的,支持所有异步场景,这是调用 JavaScript 的推荐方式。 如果需要同步调用胶水函数,可以将 IJSRuntime 实例向下转换为 IJSInProcessRuntime 并调用其同步的 Invoke 方法。 此方法采用与具有相同约束的 InvokeAsync 相同的参数。

不推荐对 JavaScript 互操作使用同步调用! 服务器端 Blazor 需要使用异步调用,因为调用将通过 SignalR 序列化到客户端。

使用 Interop 在浏览器中存储数据

是时候看一个例子了,你将从 JavaScript 粘合函数开始。 打开提供的 JSInterop 解决方案(或者您可以从头开始创建一个新的 Blazor WebAssembly 项目)。 从 JSInterop 项目中打开 wwwroot 文件夹并添加一个名为 scripts 的新子文件夹。 将一个新的 JavaScript 文件添加到名为 interop 的脚本文件夹中。 js 并添加清单 10-1 中的粘合函数。 这会将 blazorLocalStorage 对象添加到全局窗口对象,其中包含三个粘合函数。 这些粘合函数允许您从浏览器访问 localStorage 对象,这允许您将数据存储在客户端的计算机上,以便以后访问它,即使在用户重新启动浏览器或计算机之后也是如此。

清单 10-1 blazorLocalStorage 粘合函数

window.blazorLocalStorage = {
    get: key => key in localStorage ? JSON.parse(localStorage[key]) : null,
    set: (key, value) => { localStorage[key] = JSON.stringify(value); },
    delete: key => { delete localStorage[key]; },
};

您的 Blazor 网站需要包含此脚本,因此打开 wwwroot 文件夹中的 index.html 文件并在 Blazor 脚本后添加脚本引用,如清单 10-2 所示。

清单 10-2 在 HTML 页面中包含脚本引用

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0,
                                       maximum-scale=1.0, user-scalable=no" />
        <title>JSInterop</title>
        <base href="/" />
        <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet" />
        <link href="css/app.css" rel="stylesheet" />
        <link href="JSInterop.styles.css" rel="stylesheet" />
    </head>
    <body>
        <div id="app">Loading...</div>
        <div id="blazor-error-ui">
            An unhandled error has occurred.
            <a href="" class="reload">Reload</a>
            <a class="dismiss">

标签:10,互操作性,JavaScript,第十章,组件,添加,清单,using
From: https://www.cnblogs.com/King2019Blog/p/16655047.html

相关文章

  • HTML、CSS 和 JavaScript 格式的 3D 玻璃天气图标
    HTML、CSS和JavaScript格式的3D玻璃天气图标3D玻璃天气图标免费下载****在HTML、CSS和JavaScript中HTML:<divclass="weatherweather--sun"><divclass......
  • HTML、CSS 和 JavaScript 中的所有唯一字符挑战
    HTML、CSS和JavaScript中的所有唯一字符挑战HTML:<divclass="wrapper"><h1>所有独特的字符</h1><br><p>来自<ahref="https://buttondown.email/cassidoo/ar......
  • 为什么要在学习花哨的 JS 框架之前学习 Vanilla JavaScript?
    为什么要在学习花哨的JS框架之前学习VanillaJavaScript?这是DavidKopal的博客。在此博客中,您可以了解VanillaJS在您的职业生涯中的好处。他在博客中分享的文字......
  • 2022 年 Javascript 面试题
    2022年Javascript面试题这是我在前端面试中遇到的第二组javascript问题。可以通过这个帖子找到上一组javascript的问题[面试题2022基础javascript从一家公司转到......
  • 第十章-通过设计进行面向方面的编程
    在家做饭和在专业厨房工作之间有很大的区别。在家里,您可以花所有时间准备菜,但是在商用厨房中,效率是关键。Mise到位是此方面的重要方面。这不仅仅是提前准备原料;这是关于设......
  • JavaScript详解(一)
    回顾前端三要素HTML(结构):超文本标记语言(HyperTextMarkupLanguage)决定网页结构和内容CSS(表现):层叠样式表(CascadingStyleSheets),设定网页的表现形式JavaScript(行......
  • JavaScript详解(二)
    面向对象原型对象类模板原型对象对象具体的实例原型varStudent={name:"xiaoqiang",age:3,run:functio......
  • HTML、CSS 和 JavaScript 格式的 3D 玻璃天气图标
    HTML、CSS和JavaScript格式的3D玻璃天气图标3D玻璃天气图标免费下载****在HTML、CSS和JavaScript中HTML:<divclass="weatherweather--sun"><divclass......
  • 开学的JavaScript第一次测试
    这次的课堂测试我的成绩并不理想,经过一些时间的反思,我总结了一些不周到的原因,首先是我在做老师的给定的程序是没有仔细阅读,没有看到一些具体的要求,导致多米诺古效应,所以进......
  • JavaScript 非运算(!)之双感叹号的使用技巧
    我的另一篇博文中提到JavaScript有哪些是假值,哪些是真值。对于null、undefined、"",等一些假值,JavaScript直接视为false。我有一个需求,判断从浏览器中获取的Cookie是......