中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

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

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

文章目錄

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

引入

demo項(xiàng)目地址

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

思路

以新建窗口舉例,流程為

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

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

抽出公共聲明文件

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

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

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

2.主進(jìn)程引入全局聲明文件

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

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

主進(jìn)程和渲染進(jìn)程都會(huì)調(diào)用相同的事件名稱,所以我們不妨定義一個(gè)全局的事件枚舉類,方便兩個(gè)進(jìn)程的代碼書寫和規(guī)范【事件名稱應(yīng)當(dāng)唯一,否則會(huì)重復(fù)綁定】。

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

請?zhí)砑訄D片描述

  • globel\channelEvent.ts
/*** 自定義事件枚舉*/
export enum CustomChannel {window_create = "custom_window_create", // 窗口新建事件window_move_on = "custom_window_move_on", // 開啟窗口移動(dòng)事件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", // 開啟窗口移動(dòng)事件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"]},}

主進(jìn)程模塊

1.抽離基礎(chǔ)常量

我們將主進(jìn)程中常用的常量抽離到單獨(dú)的文件中:

  • 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('/');// 預(yù)加載文件路徑
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圖標(biāo)地址
export const iconPath = join(process.env.PUBLIC, 'icons/icon.ico');
// app的title,會(huì)被index.html中配置的<title>%VITE_APP_TITLE%</title> 覆蓋
export const appTitle = "新窗口";
// app在windows上注冊表的協(xié)議
export const PROTOCOL = 'bcxlelectrondemo';

2.封裝窗口工具類

注意:

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

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

3.窗口類中定義個(gè)一個(gè)listen方法,里面放置所有需要與渲染進(jìn)程交互的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";/* ======================= 定義一些窗口工具類中會(huì)使用到的常量,以及窗口頂級父類 ========================= */// 默認(rèn)窗口參數(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ù)當(dāng)前環(huán)境加載頁面,并傳遞參數(shù)const param = windowConfig.param? "?urlParamData=" + windowConfig.param: "";if (process.env.VITE_DEV_SERVER_URL) {// 如果是開發(fā)環(huán)境,則直接訪問本地跑起的服務(wù),拼接對應(yīng)的路由win.loadURL(`${url}#${windowConfig.route}${param}`);} else {// 如果是線上環(huán)境,則加載html文件的路徑,然后拼接路由win.loadFile(indexHtmlPath, { hash: windowConfig.route + param });}// 綁定通用窗口事件return win;}
}

接著我們調(diào)整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片描述

渲染進(jìn)程模塊

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

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

2.調(diào)整demo代碼

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

electron窗口工具類封裝

測試結(jié)果

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

http://www.risenshineclean.com/news/34679.html

相關(guān)文章:

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