河南城市建设招标类网站拟定网站优化方案

pingmian/2026/1/20 13:59:07/文章来源:
河南城市建设招标类网站,拟定网站优化方案,建设局,丽水网站建设明恩玉杰文章目录 Vue在混合开发中的特点创建MAUI项目创建Vue应用使用element-ui组件库JavaScript和原生代码的交互传递根组件参数从设备调用Javascript代码从Vue页面调用原生代码 读取设备信息项目地址 .NET MAUI结合Vue的混合开发可以使用更加熟悉的Vue的语法代替Blazor语法#xff… 文章目录 Vue在混合开发中的特点创建MAUI项目创建Vue应用使用element-ui组件库JavaScript和原生代码的交互传递根组件参数从设备调用Javascript代码从Vue页面调用原生代码 读取设备信息项目地址 .NET MAUI结合Vue的混合开发可以使用更加熟悉的Vue的语法代替Blazor语法你现有项目不必重写。之前写过一篇 [MAUI] 在.NET MAUI中结合Vue实现混合开发 其中介绍了如何创建一个vue应用并将其打包至MAUI项目这种方式依赖vue-cli创建和打包静态站点好处是可以使用Node.js 的构建但MAUI仅仅作为容器。开发应用需要一个独立的host项目 这次用集成的方式。将vue作为MAUI的一部分这样就可以在MAUI项目中直接使用vue了。 Vue在混合开发中的特点 首先要说的是Vue框架是渐进性的所谓渐进性就是Vue不会强求你使用所有的框架特性你可以根据需要逐步使用。 同样地element-ui也可以通过引入样式和组件库配合Vue使用 因此我们不需要Vue Router、Vuex、Vue CLI、单文件组件这些高级特性仅仅引入Vue.js即可使用Vue模板语法。我们将利用Blazor引擎的如下功能 组件化开发静态资源管理js代码的注入js调用C#代码C#调用js代码 由.NET MAUI提供的功能 路由管理状态管理 由Vue提供模板语法事件处理计算属性/侦听器等以及Element-UI提供交互组件。 创建MAUI项目 创建一个MAUI项目这里使用的是Visual Studio 2022 17.7.3创建一个Blazor MAUI App项目命名MAUI-Vue-Hybriddev-Integrated选择Android和iOS作为目标平台选择.NET 7.0作为目标框架。 从Vue官网下载最新的Vue.js 将其放置在wwwroot目录下然后在index.html中引入 script srclib/vuejs/vue.js/script创建Vue应用 在Views目录下创建 HomePage.xaml作为Vue应用的容器在页面中创建BlazorWebView视图元素并设置HostPage为wwwroot/index.html这样就可以在MAUI中使用Vue了。 BlazorWebView x:NameblazorWebViewHostPagewwwroot/index.htmlBlazorWebView.RootComponentsRootComponent Selector#appx:NamerootComponentComponentType{x:Type views:HomePageWeb} //BlazorWebView.RootComponents /BlazorWebView每个BlazorWebView控件包含根组件RootComponent定义ComponentType是在应用程序启动时加载页面时的类型该类型需要继承自Microsoft.AspNetCore.Components.IComponent由于我们的导航是由MAUI处理的因此我们不需要使用Blazor路由直接使用Razor组件 在Views目录下创建HomePageWeb.razor这是Vue应用页面相当于Vue的单文件组件这里可以使用Vue的模板语法而不是Blazor的Razor语法。 我们在HomePageWeb.razor中写下Vue官方文档中Hello Vue示例代码 div idvue-app{{ message }} /divscript typetext/javascriptvar app new Vue({el: #vue-app,data: {message: Hello Vue!,}})/script注意Vue的根元素名称不要跟Blazor的根元素名称相同否则会报错。 此时更改JavaScript里的内容你会发现Blazor页面不会热加载。 请勿将 script 标记置于 Razor 组件文件 (.razor) 中因为 script 标记无法由Blazor 动态更新。 于是需要将script部分代码放置在外部此时有两种方案一个是放在wwwroot/js目录下然后在wwwroot/index.html中引入还有一种是使用并置的js文件这种方式是所谓的CodeBehind因为更利于组织代码这里我们使用并置的js文件。 创建一个HomePageWeb.razor.js文件将script部分代码放置在其中然后在HomePageWeb.razor中引入 protected override async Task OnAfterRenderAsync(bool firstRender) {if (firstRender){await JSRuntime.InvokeAsyncIJSObjectReference(import, ./Views/HomePageWeb.razor.js);} }发布应用后框架会自动将脚本移动到 Web 根目录。 在此示例中脚本被移动到./wwwroot/Views/HomePageWeb.razor.js 使用element-ui组件库 同样我们在element-ui官方CDN下载样式文件和组件库首先在index.html中引入样式和组件库 link hrefcss/app.css relstylesheet / ... script srclib/element-ui/index.js/script然后在HomePageWeb.razor中使用组件 div idvue-app{{ message }}el-input v-modelinput placeholder请输入内容/el-inputel-button clickshowDialog true提交/el-buttonel-dialog :visible.syncshowDialog title消息p{{input}}/pp提交成功/p/el-dialog /divCodeBehind中引入组件 var app new Vue({el: #vue-app,data: {message: Hello Vue!,showDialog: false,input: text message from vue} })运行效果如下 JavaScript和原生代码的交互 Blazor组件中的代码可以通过注入IJSRuntime来调用JavaScript代码JavaScript代码可以通过调用DotNet.invokeMethodAsync来调用C#代码。 传递根组件参数 如果被调用的代码位于其他类中需要给这个Blazor组件传递实例还记得刚才提及的根组件RootComponent吗我们用它来传递这个实例称之为根组件参数详情请查看官方文档 在 ASP.NET Core Blazor Hybrid 中传递根组件参数 创建SecondPage.xaml根据刚才的步骤创建一个BlazorWebView并注入vuejs代码 html部分创建一个el-dialog组件当消息被接收时显示对话框 using Microsoft.Maui.Controls inject IJSRuntime JSRuntimediv idvue-app{{ message }}el-dialog :visible.syncshowDialog titleNative device msg recived!p{{msg}}/p/el-dialog /div 在code代码段中创建SecondPage对象。 code {[Parameter]public SecondPage SecondPage { get; set; }... } 回到SecondPage.xaml.cs在构造函数中将自己传递给根组件参数 public SecondPage() {InitializeComponent();rootComponent.Parameters new Dictionarystring, object{{ SecondPage, this }}; } 从设备调用Javascript代码 在SecondPage.xaml中创建一个Post按钮点击按钮后将文本框PostContentEntry的内容传递给Vue代码 StackLayout Grid.Row1Entry x:NamePostContentEntry TextHello,this is greetings from native device/EntryButton TextPost To VueHorizontalOptionsCenterVerticalOptionsEndHeightRequest40ClickedPost_Clicked/Button/StackLayout在SecondPage.razor.js中, 创建greet方法用于接收从原生代码传递过来的参数并显示在对话框中。 window.app new Vue({el: #vue-app,data: {message: Vue Native interop,showDialog: false,msg: },methods: {greet: function (content) {this.msg content;this.showDialog true;}},在SecondPage.xaml.cs中创建一个OnPost事件当Post按钮被点击时触发该事件 public event EventHandlerOnPostEventArgs OnPost;private void Post_Clicked(object sender, EventArgs args) {OnPost?.Invoke(this, new OnPostEventArgs(this.PostContentEntry.Text)); } 在SecondPage.razor中订阅OnPost事件当事件被触发时调用greet方法将参数传递给JavaScript代码 public async void Recived(object o, OnPostEventArgs args) {await JSRuntime.InvokeAsyncstring(window.app.greet, args.Content); }protected override async Task OnAfterRenderAsync(bool firstRender) {try{if (firstRender){SecondPage.OnPost this.Recived;await JSRuntime.InvokeAsyncIJSObjectReference( import, ./Views/SecondPageWeb.razor.js);}}catch (Exception ex){Console.WriteLine(ex);}} 在页面销毁时要取消订阅事件避免内存泄漏。 implements IDisposable...public void Dispose() {SecondPage.OnPost - this.Recived; } 运行效果如下 从Vue页面调用原生代码 原生代码指的是.NET MAUI平台的C#代码比如要在设备上显示一个弹窗需要调用Page.DisplayAlert方法它隶属于Microsoft.Maui.Controls命名空间属于MAUI组件库的一部分。 因此需要将MAUI类型的对象通过引用传递给JavaScript调用调用方式是通过将对象实例包装在 DotNetObjectReference 中传递给JavaScript。使用该对象的invokeMethodAsync从 JS 调用 .NET 实例方法。详情请查看官方文档 JavaScript 函数调用 .NET 方法 在code代码段中界面加载时创建DotNetObjectReference对象 code {private DotNetObjectReferenceSecondPageWeb? objRef;protected override void OnInitialized(){objRef DotNetObjectReference.Create(this);} 页面加载完成时将DotNetObjectReference对象传递给JavaScript代码 protected override async Task OnAfterRenderAsync(bool firstRender) {try{if (firstRender){SecondPage.OnPost this.Recived;await JSRuntime.InvokeAsyncIJSObjectReference( import, ./Views/SecondPageWeb.razor.js);await JSRuntime.InvokeAsyncstring(window.initObjRef, this.objRef);}}catch (Exception ex){Console.WriteLine(ex);}}window.app new Vue({...data: {...objRef: null},}) window.initObjRef function (objRef) {window.app.objRef objRef; } 在SecondPage.razor中创建el-input组件和el-button组件当按钮被点击时调用Post方法将文本框的内容传递给原生代码 div idvue-app{{ message }}el-input v-modelinput placeholder请输入内容/el-inputel-button clickpostPost To Native/el-buttonel-dialog :visible.syncshowDialog titleNative device msg recived!p{{msg}}/p/el-dialog /div按钮和对话框的显示逻辑与之前相同不再赘述。 在SecondPage.razor中创建Post方法方法被调用时将触发MAUI组件库的原生代码 [JSInvokable] public async Task Post(string content) {await SecondPage.DisplayAlert(Vue msg recived!, content, Got it!);}vue绑定的函数中调用DotNet.invokeMethodAsync将文本框的内容传递给原生代码 window.app new Vue({el: #vue-app,data: {message: Vue Native interop,showDialog: false,msg: ,input: Hi, I am a text message from Vue,deviceDisplay: null,objRef: null},methods: {greet: function (content) {this.msg content;this.showDialog true;},post: function () {this.objRef.invokeMethodAsync(Post, this.input);}} })运行效果如下 读取设备信息 可以使用Vue的watch属性监听数据变化当MAUI对象加载完成时调用原生代码读取设备信息 div idvue-app...pDevice Display/pp{{deviceDisplay}}/p /divCodeBehind代码如下 watch: {objRef: async function (newObjRef, oldObjRef) {if (newObjRef) {var deviceDisplay await this.objRef.invokeMethodAsync(ReadDeviceDisplay);console.warn(deviceDisplay);this.deviceDisplay deviceDisplay;}} },原生代码如下 [JSInvokable] public async Taskstring ReadDeviceDisplay() {return await Task.FromResult(SecondPage.ReadDeviceDisplay());}在ReadDeviceDisplay方法中我们读取设备分辨率、屏幕密度、屏幕方向、屏幕旋转、刷新率等信息 public string ReadDeviceDisplay() {System.Text.StringBuilder sb new System.Text.StringBuilder();sb.AppendLine($Pixel width: {DeviceDisplay.Current.MainDisplayInfo.Width} / Pixel Height: {DeviceDisplay.Current.MainDisplayInfo.Height});sb.AppendLine($Density: {DeviceDisplay.Current.MainDisplayInfo.Density});sb.AppendLine($Orientation: {DeviceDisplay.Current.MainDisplayInfo.Orientation});sb.AppendLine($Rotation: {DeviceDisplay.Current.MainDisplayInfo.Rotation});sb.AppendLine($Refresh Rate: {DeviceDisplay.Current.MainDisplayInfo.RefreshRate});var text sb.ToString();return text; }当页面加载时会在HTML页面上显示设备信息 ​ 项目地址 Github:maui-vue-hybirddev 关注我学习更多.NET MAUI开发知识 ​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/87493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设的目标有哪些怎样是做网站

快速连接形成稳定的电测试在新能源行业里面是很常见的测试场景,比如说在新能源汽车行业的电池包、电机、电控制器的电性能测试中会有很多高压线束,需要将这些线束和电池包、电控制器、电机与测试设备快速连接在一起进行相关的EOL/DCR测试。 新能源汽车高…

购物网站建设优势网站建设与管理 中职

在前一篇博客中,我们介绍了五个实用的爬虫示例,分别用于新闻文章、图片、电影信息、社交媒体和股票数据的采集。本文将继续探索爬虫的奇妙世界,为你带来五个全新的示例,每个示例都有其独特的用途和功能。 1. Wikipedia数据采集 爬…

网站建设与维护的软件网站开发费用报价单

一年一度的“双十一”又要来了,很多人已经开始摩拳擦掌,毕竟几天之后手还在不在就不好说了。 作者:清风小筑 各种社交软件也是跟着遭殃,整天就是“来帮我一起盖楼”,各种字体绕过屏蔽,什么奇葩的脑洞也出来…

政务网站建设工作总结旅游网站首页设计模板

文章目录T1:跳格子题目题解CODET2:英雄联盟题目题解CODET3:排序问题题目题解CODET1:跳格子 题目 n 个格子排成一列,一开始,你在第一个格子,目标为跳到第 n 个格子。在每个格子 i 里面你可以做…

做的比较好网站有哪些公司网站设计报价

【出现问题】 php页面显示中文字符出现乱码 【解决方法】 在php页面的代码前插入一行代码即可 header("Content-Type: text/html;charsetutf-8"); 转载于:https://www.cnblogs.com/wangyang0210/p/9187403.html

中山网站建设招聘网络营销工具包括

造个可重入锁的轮子 介绍目标 正文sync.Mutexsync.Mutex介绍多协程计数器demo多协程计数器加锁 源码剖析Mutex数据结构Lock()加锁核心逻辑 UnLock() 重入锁与可重入锁魔改 sync.Mutex 参考文档 介绍 开新坑啦!! 从这篇文章开始,尝试造轮子&a…

罗湖网站制作费用营销型网站建设策划案

文章目录 载具Vehicle Variety Pack(车辆品种包)Vehicle Variety Pack Volume 2(车辆品种包第 2 卷)家具Free Furniture Pack(免费家具包)Old West - VOL 1 - Interior Furniture(旧西部 - 第1卷 - 家具包)Old West VOL.3 - Travel Supplies and Goods(旧西部 - 第3卷…

邯郸做网站服务商做网站月入

一、本文介绍 本文给家大家带来的改进机制是iRMB,其是在论文Rethinking Mobile Block for Efficient Attention-based Models种提出,论文提出了一个新的主干网络EMO(后面我也会教大家如何使用该主干,本文先教大家使用该文中提出的注意力机制…

西樵营销网站制作企业展厅设计公司重庆

目录 一、基础知识1.异或运算xor2.模2算术(1)模2加法和减法(2)模2乘法(3)模2除法 二、CRC循环冗余检测1.背景2.原理3.求R 一、基础知识 1.异或运算xor 异或,顾名思义,只有当两个数…

网站快速建设软件下载西宁吧 百度贴吧

缓存穿透 一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就去后端系统查找(比如DB)。 一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透…

离退休部门网站建设情况小游戏开发软件

以实战例子讲述JSON三兄弟的后续故事。实战一:发送JSON网络请求作为JSON老大哥的QJsonValue自知对面的大户人家妹子貌美如花,心里已经打起算盘,先下手为强,后下手遭殃。决定显示下自己的家底,想起这件事,老…

安徽做公司网站哪家好建设与管理局网站

技术背景 技术概述 FPGA实现除法运算是一个比较复杂的过程,因为硬件逻辑与软件程序的区别。如果其中一个操作数为常数,可以通过简单的移位与求和操作代替,但用硬件逻辑完成两变量间除法运算会占用较多的资源,电路结构复杂&#xf…

做网站主机电脑布吉做棋牌网站建设哪家公司便宜

Input 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数&#xff0c;分别是城镇数目N ( < 1000 )和道路数目M&#xff1b;随后的M行对应M条道路&#xff0c;每行给出一对正整数&#xff0c;分别是该条道路直接连通的两个城镇的编号。为简单起见&#xff0c;城镇…

个人网站用什么软件网站开发定制合同

在智慧电表水表的数据采集和存储过程中&#xff0c;时序数据处理成为一个重要的问题。由于电表水表数据具有时间序列的特点&#xff0c;传统的数据库和数据处理方式往往难以满足大规模数据的高速采集、存储和实时分析需求。因此&#xff0c;越来越多的企业开始进行数据架构改造…

网站开发策划书冠县快搜网站建设有限公司

C里默认int型1的二进制表示为&#xff1a; 0000 0000 0000 0000 0000 0000 0000 0001如果左移31位&#xff0c;会得到最小值 1<<31 //会得到-2147483648&#xff0c;即int型最小值即 1000 0000 0000 0000 0000 0000 0000 0000因为int类型是有符号的&#xff0c;第一位…

无障碍环境建设 网站服装品牌网站开发php

爬虫、数据清洗和分析是在数据科学、数据挖掘和网络爬虫开发领域中常见的概念。 爬虫&#xff08;Web Scraping&#xff09;&#xff1a;爬虫是一种自动化程序或脚本&#xff0c;用于从互联网上的网站上提取信息。这些信息可以是文本、图像、视频或其他类型的数据。爬虫通常会…

PHP网站开发程序员招聘做网站要了解哪些

背景 美团COS&#xff1a;全称美团网核心业务系统部&#xff0c;以持续整合O2O线下资源&#xff0c;共建高效率、低成本的供应链系统&#xff0c;高效推动O2O生态环境建设为业务目标&#xff0c;负责美团网核心业务系统的建设和管理。 COS系统&#xff0c;伴随着美团3年多的发展…

网站建设上市广东新闻联播

02【保姆级】-GO语言开发注意事项&#xff08;特色重点&#xff09; 一、Go语言的特性1.1 第一个hello word&#xff08;详解&#xff09;1.2 开发编译。&#xff08;重要点 / 面试题&#xff09;1.3 开发注意事项1.4 GO语言的转义字符1.5 注释1.6 API 文档 一、Go语言的特性 …

重庆做网站泉州公司辽阳建设网站公司报价

常用的设计模式&#xff1a; 一、单例模式 java中单例模式是一种常见的设计模式&#xff0c;单例模式的写法有好几种&#xff0c;这里主要介绍三种&#xff1a;懒汉式单例、饿汉式单例、双重检查锁定 1、单例模式有以下特点&#xff1a;   a、单例类只能有一个实例。   b…

母婴行业网站建设创建免费网站需要的工具

注解目录 1.制冷设备的监测迫在眉睫 1.1 冷食的利润贡献 1.2 冷设监测系统的困难 &#xff08;制冷设备对于便利店为何如何重要&#xff1f;了解一下你所不知道的便利店和新零售行业。关于电力线载波通信的论战。&#xff09; 2、电路设计 2.1 防护电路 2.1.1 强电防护 …