最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Electron實(shí)現(xiàn)桌面應(yīng)用開(kāi)發(fā)代碼實(shí)例

 更新時(shí)間:2020年07月07日 09:12:31   作者:HiIT青年  
這篇文章主要介紹了基于Electron實(shí)現(xiàn)桌面應(yīng)用開(kāi)發(fā)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Electron是一個(gè)可以使用 JavaScript,HTML 和 CSS 構(gòu)建跨平臺(tái)桌面應(yīng)用程序的開(kāi)源框架。

本文主要分享一下采用vue + electron開(kāi)發(fā)桌面程序的搭建過(guò)程。

1. 環(huán)境準(zhǔn)備

這里采用的是vue-cli3.x,可以通過(guò)下面的指令查看當(dāng)前vue-cli的版本:

vue --version# 3.9.3 這里我用的是3.9.3

如果沒(méi)有裝vue-cli可以通過(guò)下面的命令安裝:

npm install -g @vue/cli

如果是vue-cli還是2.x可以先卸載2.x然后裝3.x

npm uninstall vue-cli -g

npm install -g @vue/cli

2. 創(chuàng)建項(xiàng)目

這里采用vue-cli創(chuàng)建vue項(xiàng)目。

vue create electron-helloworld

引入vue-cli-plugin-electron-builder

cd electron-helloworld

vue add electron-builder

這一步需要拉取electron-vX.Y.Z-win32-x64.zip,過(guò)程非常漫長(zhǎng)。

3. 運(yùn)行項(xiàng)目

運(yùn)行electron項(xiàng)目。

npm run electron:serve

4. node通訊

正常來(lái)說(shuō)vue組件應(yīng)該只關(guān)心頁(yè)面層的邏輯即可,所以為了解耦,可以在Vue Component和Node API、Electron API中間插入一個(gè)橋接層,然后通過(guò)IPC進(jìn)行通訊,如下圖所示:

按照關(guān)系圖,Vue Commponent通過(guò)Service發(fā)布事件,完成與Node API和Electron API的通訊,下面根據(jù)這個(gè)關(guān)系寫(xiě)一個(gè)讀取文件內(nèi)容的示例。

創(chuàng)建Service,發(fā)布事件并監(jiān)聽(tīng)

/bridge/service/Service.js

import { ipcRenderer } from 'electron'
class Service {
 readTxt(params, callback) {
  ipcRenderer.once('readTxt', (e, ret) => callback(ret))
  // 將params參數(shù)傳給Server
  ipcRenderer.send('readTxt', params)
 }
}
export default new Service()

創(chuàng)建Server,監(jiān)聽(tīng)事件并讀取文件內(nèi)容返回

/bridge/server/Server.js

import { ipcMain } from "electron";
import fs from 'fs'
export default class Server {
 constructor(app, win) {
  this.app = app
  this.win = win
 }
 initEventHandler() {
  ipcMain.on('readTxt', (e, params) => {
   // 這里將參數(shù)轉(zhuǎn)化為json,然后讀取G:\\0.txt的內(nèi)容一起返回
   const pms = JSON.stringify(params)
   const ret = fs.readFileSync('G:\\0.txt')
   e.sender.send('readTxt', pms + '::::' + ret)
  })
 }
}

啟動(dòng)Server

在創(chuàng)建完Server之后,需要在應(yīng)用程序啟動(dòng)的時(shí)候啟動(dòng)并讓其監(jiān)聽(tīng)對(duì)應(yīng)的事件。

這里可以創(chuàng)建一個(gè)ApplicationContext,來(lái)啟動(dòng)Server。

/bridge/ApplicationContext.js

import Server from './server/Server'
export default class ApplicationContext {
 constructor(app, window) {
  this.app = app
  this.window = window
 }
 init() {
  new Server(this.app, this.window).initEventHandler()
 }
}

然后在background.js中實(shí)例化ApplicationContext,并調(diào)用init方法。

 win.on('closed', () => {
  win = null
 })
 // Windows創(chuàng)建完成后初始化context
 new ApplicationContext(app, win).init()

Vue組件調(diào)用Service

完成上面三步之后,只需要在vue組件中調(diào)用Service即可,這一步跟普通開(kāi)發(fā)vue程序是一樣的。

<div>{{txt}}</div>
<button @click="readTxt">讀取文件信息</button>
<script>
import service from '@/bridge/service/Service'
export default {
 name: 'HelloWorld',
 props: {
  msg: String
 },
 data() {
  return {
   txt: ''
  }
 },
 methods: {
  readTxt() {
   // 這里傳入兩個(gè)參數(shù),并將返回結(jié)果賦值給txt,在div中顯示出來(lái)
   service.readTxt({
    p1: '參數(shù)1',
    p2: '參數(shù)2'
   }, resp => {
    this.txt = resp
   })
  }
 }
}
</script>

至此,一個(gè)electron helloworld示例就完成了。

5. node API undefind

在上面的過(guò)程中可能會(huì)遇到node API undefined的情況,這是因?yàn)閑lectron禁用了node集成,在background.js中創(chuàng)建window的時(shí)候指定了配置:

webPreferences: {
   // Use pluginOptions.nodeIntegration, leave this alone
   // See nklayman.github.io/vue-cli-plugin-electron builder/guide/security.html#node-integration for more info
   nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION
   // nodeIntegration: true
}

這里可以通過(guò)配置electronBuilder插件解決。

在項(xiàng)目目錄根目錄下面創(chuàng)建vue.config.js,內(nèi)容如下:

// see https://cli.vuejs.org/config
module.exports = {
 productionSourceMap: false,
 pluginOptions: {
  electronBuilder: {
   nodeIntegration: true,
  },
  configureWebpack: {
   resolve: {
    symlinks: true
   }
  }
 }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JS去除重復(fù)并統(tǒng)計(jì)數(shù)量的實(shí)現(xiàn)方法

    JS去除重復(fù)并統(tǒng)計(jì)數(shù)量的實(shí)現(xiàn)方法

    js去除重復(fù)并統(tǒng)計(jì)數(shù)量方法,首先點(diǎn)擊按鈕觸發(fā)事件,然后用class選擇器,迭代要獲取的文本(這里最好用text()方法)加入到Array()集合里。具體操作方法,大家通過(guò)本文學(xué)習(xí)下吧
    2016-12-12
  • Bootstrap源碼解讀模態(tài)彈出框(11)

    Bootstrap源碼解讀模態(tài)彈出框(11)

    這篇文章主要源碼解讀了Bootstrap模態(tài)彈出框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Three.js基礎(chǔ)部分學(xué)習(xí)

    Three.js基礎(chǔ)部分學(xué)習(xí)

    本文主要分享了一個(gè)案例,介紹了使用Three.js繪制旋轉(zhuǎn)立方體的方法與實(shí)現(xiàn)過(guò)程。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • ionic js 復(fù)選框 與普通的 HTML 復(fù)選框到底有沒(méi)區(qū)別

    ionic js 復(fù)選框 與普通的 HTML 復(fù)選框到底有沒(méi)區(qū)別

    本文通過(guò)實(shí)例給大家演示ionic js 復(fù)選框 與普通的 HTML 復(fù)選框到底有沒(méi)區(qū)別的相關(guān)知識(shí),非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-06-06
  • JavaScript中this詳解

    JavaScript中this詳解

    this是javascript的一個(gè)關(guān)鍵字,隨著函數(shù)使用場(chǎng)合不同,this的值會(huì)發(fā)生變化。但是總有一個(gè)原則,那就是this指的是調(diào)用函數(shù)的那個(gè)對(duì)象。
    2015-09-09
  • JS簡(jiǎn)單實(shí)現(xiàn)表格排序功能示例

    JS簡(jiǎn)單實(shí)現(xiàn)表格排序功能示例

    這篇文章主要介紹了JS簡(jiǎn)單實(shí)現(xiàn)表格排序功能,涉及javascript針對(duì)頁(yè)面元素的遍歷、判斷與排序相關(guān)操作技巧,需要的朋友可以參考下
    2016-12-12
  • Js中Symbol的靜態(tài)屬性及用途詳解

    Js中Symbol的靜態(tài)屬性及用途詳解

    JavaScript 語(yǔ)言在 ES6 規(guī)范中引入了 Symbol 類型,它是一種原始數(shù)據(jù)類型,用于創(chuàng)建唯一的標(biāo)識(shí)符,本文將介紹 Symbol 類型的所有靜態(tài)屬性,并舉例說(shuō)明它們的用途和使用場(chǎng)景,希望對(duì)大家有所幫助
    2023-12-12
  • dess中一個(gè)簡(jiǎn)單的多路委托的實(shí)現(xiàn)

    dess中一個(gè)簡(jiǎn)單的多路委托的實(shí)現(xiàn)

    這個(gè)SDelegate用起來(lái)可能會(huì)比較詭異,比如很多操作都要重新賦值。Dess中,SDelegate主要用于一些特定場(chǎng)合,如DOM事件派發(fā)。
    2010-07-07
  • 微信小游戲中three.js離屏畫(huà)布的示例代碼

    微信小游戲中three.js離屏畫(huà)布的示例代碼

    這篇文章主要介紹了微信小游戲中three.js離屏畫(huà)布的示例代碼,主要是用three.js結(jié)合cannon.js寫(xiě)個(gè)3D小游戲,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2020-10-10
  • 微信小程序?qū)崿F(xiàn)canvas電子簽名功能

    微信小程序?qū)崿F(xiàn)canvas電子簽名功能

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)微信小程序?qū)崿F(xiàn)canvas電子簽名功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10

最新評(píng)論

达拉特旗| 青阳县| 汤阴县| 怀来县| 德江县| 滦南县| 隆子县| 池州市| 邵阳县| 南华县| 沙洋县| 财经| 乌拉特前旗| 梓潼县| 博客| 闽侯县| 逊克县| 柘城县| 绵阳市| 盐源县| 丹凤县| 六枝特区| 斗六市| 虹口区| 台南市| 潞城市| 西充县| 鄱阳县| 垦利县| 临洮县| 嵩明县| 溧阳市| 桦甸市| 同心县| 贵定县| 绥宁县| 米林县| 朝阳县| 万宁市| 航空| 蓬莱市|