国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

招聘網(wǎng)站上怎么做推廣青島網(wǎng)站建設公司電話

招聘網(wǎng)站上怎么做推廣,青島網(wǎng)站建設公司電話,做本地網(wǎng)站要服務器嗎,怎么做免費網(wǎng)站被收錄文章目錄 引入思路抽出公共聲明文件抽出全局通用數(shù)據(jù)類型和方法主進程模塊1.抽離基礎常量2.封裝窗口工具類 渲染進程模塊測試結果 引入 demo項目地址 可以看到我們之前在主進程中的邏輯全部都塞到index.ts文件中,包括窗口的一些事件處理,handle監(jiān)聽&am…

文章目錄

    • 引入
    • 思路
    • 抽出公共聲明文件
    • 抽出全局通用數(shù)據(jù)類型和方法
    • 主進程模塊
      • 1.抽離基礎常量
      • 2.封裝窗口工具類
    • 渲染進程模塊
    • 測試結果

引入

demo項目地址

可以看到我們之前在主進程中的邏輯全部都塞到index.ts文件中,包括窗口的一些事件處理,handle監(jiān)聽,協(xié)議注冊等等,后期維護起來會比較麻煩,我們不妨將其中的功能細分,封裝到工具類中。

思路

以新建窗口舉例,流程為

  • 主進程ipcMain.handle監(jiān)聽,根據(jù)傳來的參數(shù)構建新窗口
/*** 新建一個窗口* route=>路由地址  paramJsonStr => 序列化后的參數(shù)對象*/
ipcMain.handle("open-win", (_, route: string, paramJsonStr: string) => {...})
  • 渲染進程調用 ipcRenderer.invoke方法通知主進程創(chuàng)建窗口
/*** 新建一個窗口* @param path 路由地址* @param param 傳遞的參數(shù)*/
export function openWindow(path: string, param?: Object) {...ipcRenderer.invoke("open-win", path, paramJsonStr);
}

可以預見的是,后續(xù)窗口的創(chuàng)建邏輯會隨著業(yè)務邏輯而擴展,例如創(chuàng)建窗口時 指定窗口寬高,標題,背景色等屬性,設置窗口透明,事件擊穿等等內容,并且多個窗口間的一些交互需要我們去維護一個窗口組信息,記錄窗口的id和邏輯上的關聯(lián)關系等。
所以我們不妨創(chuàng)建一個窗口工具類,專門集成封裝窗口相關的方法,屬性等

抽出公共聲明文件

我們在渲染進程項目模塊中的electronUtils和主進程中的窗口工具類中的【handle/on】方法是一一對應的【invoke/send】,傳入的參數(shù)也是通用的,所以我們不妨抽出一個公共的全局聲明文件,用于聲明通用的一些參數(shù)對象。

1.在全局聲明文件中添加通用事件對象的聲明

  • types\global.d.ts
/** 一些全局的對象補充聲明 */
export {};
declare global {...// 窗口創(chuàng)建參數(shù)規(guī)范interface IWindowConfig {key?: string; // 窗口唯一key,不傳則取窗口的id,假如已存在該key則聚焦該窗口route?: string; // 窗口路由width?: number; // 窗口寬度height?: number; // 窗口高度param?: string; // 傳遞參數(shù),新窗口打開時能直接從路由中獲取,拼接url傳遞,推薦只傳小數(shù)據(jù)}
}

2.主進程引入全局聲明文件

  • electron\electron-env.d.ts
/// <reference types="vite-plugin-electron/electron-env" />import "../types/global.d.ts";

抽出全局通用數(shù)據(jù)類型和方法

主進程和渲染進程都會調用相同的事件名稱,所以我們不妨定義一個全局的事件枚舉類,方便兩個進程的代碼書寫和規(guī)范【事件名稱應當唯一,否則會重復綁定】。

1.在根目錄下創(chuàng)建globel目錄,然后分別創(chuàng)建channelEvent.ts和channelEvent.d.ts兩個文件 【事件管道枚舉和對應的聲明文件】

請?zhí)砑訄D片描述

  • globel\channelEvent.ts
/*** 自定義事件枚舉*/
export enum CustomChannel {window_create = "custom_window_create", // 窗口新建事件window_move_on = "custom_window_move_on", // 開啟窗口移動事件window_position_change = "custom_window_position_change", // 修改窗口的位置
}
  • globel\channelEvent.d.ts
// customEvents.d.ts/*** 自定義事件枚舉的類型聲明*/
export declare enum CustomChannel {window_create = "custom_window_create", // 窗口新建事件window_move_on = "custom_window_move_on", // 開啟窗口移動事件window_position_change = "custom_window_position_change", // 修改窗口的位置
}

2.在根目錄下的tsconfig.node.json文件中添加引入

  • tsconfig.node.json
  "include": [...,"globel"]

3.配置別名快速訪問

  • vite.config.ts
... 
resolve: {alias: {..."@globel": path.resolve(__dirname, "./globel"),},},
  • tsconfig.json
{"compilerOptions": {..."paths": {..."@globel/*": ["globel/*"],},"types": ["vite-plugin-svg-icons/client"]},}

主進程模塊

1.抽離基礎常量

我們將主進程中常用的常量抽離到單獨的文件中:

  • electron\main\common\variables.ts
import { join } from 'node:path';/***公共變量配置*/
process.env.DIST_ELECTRON = join(__dirname, '..');
process.env.DIST = join(process.env.DIST_ELECTRON, '../dist');
process.env.PUBLIC = process.env.VITE_DEV_SERVER_URL? join(process.env.DIST_ELECTRON, '../public'): process.env.DIST;// 公共變量中存一份SRC的路徑,方便取值
process.env.SRC_PATH = join(__dirname, '../../src').split('\\').join('/');// 預加載文件路徑
export const preloadPath = join(__dirname, '../preload/index.js');
// dev環(huán)境請求地址
export const url = process.env.VITE_DEV_SERVER_URL;
// 部署環(huán)境的html文件路徑
export const indexHtmlPath = join(process.env.DIST, 'index.html');
// icon圖標地址
export const iconPath = join(process.env.PUBLIC, 'icons/icon.ico');
// app的title,會被index.html中配置的<title>%VITE_APP_TITLE%</title> 覆蓋
export const appTitle = "新窗口";
// app在windows上注冊表的協(xié)議
export const PROTOCOL = 'bcxlelectrondemo';

2.封裝窗口工具類

注意:

1.定義默認窗口參數(shù)時使用了ts中的聯(lián)合類型,這樣定義的defaultWindowConfig就必須擁有指定的兩個類型中的所有屬性

2.創(chuàng)建了一個窗口類,并將窗口相關的邏輯封裝為窗口類中的成員方法

3.窗口類中定義個一個listen方法,里面放置所有需要與渲染進程交互的handle監(jiān)聽

  • electron\main\windowUtils.ts
import {BrowserWindow,BrowserWindowConstructorOptions,ipcMain,
} from "electron";
import {url,appTitle,preloadPath,iconPath,indexHtmlPath,
} from "./common/variables";
import { CustomChannel } from "../../globel/channelEvent";/* ======================= 定義一些窗口工具類中會使用到的常量,以及窗口頂級父類 ========================= */// 默認窗口參數(shù)
export const defaultWindowConfig: BrowserWindowConstructorOptions &IWindowConfig = {title: appTitle,icon: iconPath,width: 800,height: 600,webPreferences: {webviewTag: true,preload: preloadPath,nodeIntegration: true,contextIsolation: false,},
};/*** 窗口工具類*/
export class WindowUtils {// 事件監(jiān)聽處理listen() {// 窗口創(chuàng)建監(jiān)聽ipcMain.handle(CustomChannel.window_create, (_, opt: IWindowConfig) => {this.createWindows(opt);});}/*** 創(chuàng)建窗口* @param windowConfig 窗口創(chuàng)建參數(shù)*/createWindows(windowConfig: IWindowConfig): BrowserWindow {// 創(chuàng)建窗口對象const win = new BrowserWindow(Object.assign({}, defaultWindowConfig, windowConfig));// 根據(jù)當前環(huán)境加載頁面,并傳遞參數(shù)const param = windowConfig.param? "?urlParamData=" + windowConfig.param: "";if (process.env.VITE_DEV_SERVER_URL) {// 如果是開發(fā)環(huán)境,則直接訪問本地跑起的服務,拼接對應的路由win.loadURL(`${url}#${windowConfig.route}${param}`);} else {// 如果是線上環(huán)境,則加載html文件的路徑,然后拼接路由win.loadFile(indexHtmlPath, { hash: windowConfig.route + param });}// 綁定通用窗口事件return win;}
}

接著我們調整index.ts中的創(chuàng)建主窗口的代碼:

import {WindowUtils} from './windowUtils'// 創(chuàng)建窗口工具類
const windowUtils = new WindowUtils();
windowUtils.listen();...
async function createWindow() {...win = windowUtils.createWindows({route:"/"});
}

對比之前代碼,簡練了不少

請?zhí)砑訄D片描述

渲染進程模塊

1.我們調整通用交互工具類,補充新的窗口創(chuàng)建方法

  • src\utils\electronUtils.ts
import { ipcRenderer } from "electron";
import { CustomChannel } from "@globel/channelEvent";
/*** 新建一個窗口* @param windowConfig*/
export function createWindow(windowConfig: IWindowConfig) {ipcRenderer.invoke(CustomChannel.window_create, windowConfig);
}

2.調整demo代碼

  • src\components\demo\Index.vue
 electronUtils.createWindow({route: windowPath.value,param: JSON.stringify({message: "向你問個好~~",}),});

electron窗口工具類封裝

測試結果

能夠正常的創(chuàng)建窗口
electron窗口工具類封裝測試

http://m.aloenet.com.cn/news/34679.html

相關文章:

  • 什么網(wǎng)站做外貿(mào)最好推廣平臺有哪些
  • 大石橋網(wǎng)站建設百度關鍵字優(yōu)化價格
  • javaweb做新聞網(wǎng)站北京百度推廣電話號碼
  • 室內環(huán)保網(wǎng)站模板代碼seo網(wǎng)站優(yōu)化培訓怎么做
  • 做的好微信商城網(wǎng)站嗎seo顧問服務四川
  • 福田做棋牌網(wǎng)站建設哪家公司便宜信息發(fā)布平臺推廣
  • 制作精美網(wǎng)站建設售后完善信息流廣告代運營
  • 天津做網(wǎng)站的公司營銷網(wǎng)絡推廣哪家好
  • 手機網(wǎng)站模板開發(fā)工具seo網(wǎng)絡營銷推廣公司深圳
  • 相冊模版網(wǎng)站圖片展示成人再就業(yè)培訓班
  • 網(wǎng)站流量少宣傳產(chǎn)品的方式
  • 請人做網(wǎng)站后臺密碼推廣模式包括哪些模式
  • 復興網(wǎng)站制作網(wǎng)絡推廣文案策劃
  • 成都網(wǎng)站建設哪兒濟南興田德潤怎么聯(lián)系婁底seo
  • 網(wǎng)站的反鏈要怎么做近期國內熱點新聞事件
  • 網(wǎng)站建設好學嗎google ads 推廣
  • 九江網(wǎng)站建設多少錢百度推廣客服電話24小時
  • 2012搭建wordpress網(wǎng)站seo專員招聘
  • 技術支持 東莞網(wǎng)站建設舞蹈培訓免費的網(wǎng)頁制作軟件
  • 怎么做網(wǎng)站排名優(yōu)化電子商務平臺
  • 珠海網(wǎng)站建立seo外鏈在線提交工具
  • 鮮花商城網(wǎng)站建設怎么找拉新推廣平臺
  • 手機app制作網(wǎng)站模板seo兼職論壇
  • 專業(yè)網(wǎng)站優(yōu)化報價優(yōu)化推薦
  • wordpress復制他人的網(wǎng)站網(wǎng)站收錄情況查詢
  • 推廣優(yōu)化濟南網(wǎng)絡優(yōu)化網(wǎng)站
  • 網(wǎng)站改版的原因微信怎么推廣自己的產(chǎn)品
  • wordpress 獲取文章評論百度app關鍵詞優(yōu)化
  • 博客做單頁網(wǎng)站網(wǎng)站建設的方法有哪些
  • 自己做的網(wǎng)頁怎么連接到網(wǎng)站某個產(chǎn)品營銷推廣方案