<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
我們在開發的過程中難免會遇到需要建立一個子視窗(子程序),但是在這個子程序中所有值都是初始化的,而我們肯定是需要一些值才能進行下一步操作,比如:token; 那麼我們怎麼去傳遞值呢?
我先給夥伴們說一些,基本原理(下面很多東西會建立在vue的基礎上生命週期,如果是其他框架就自行修改就行),然後再給大家根據程式碼一步一步操作。
大家看到這兒可能覺得很麻煩,但是如果我們在建立新視窗的時候就傳遞值的話,可能子程序的渲染程序拿不到值;主要原因有:
所以我們當時搞了這種方法,目前執行半年以上基本上都沒得問題;如果你有更好的方法也可以告訴我們,一起聊聊;哈哈哈
在主程序中設定視窗資訊,具體內容可以看檔案,以下是我的設定;設定中的引數都是可以根據自己的需求變化的;
注意: 在開發環境時,root_path的地址必須是你的ip地址,而不是localhost一類的。
let modal; // 接收彈出模態框 ipcMain.on('open-modal',(event,path,title = '提示')=>{ console.log(path); let root_path; if (process.env.WEBPACK_DEV_SERVER_URL) { root_path = "http://192.168.110.95:8080/"; // root_path = "http://192.168.124.4:8080/"; } else { // root_path = "app://./index.html/"; root_path = `file://${__dirname}/index.html/`; }; const minWidth = 1176; const minHeight = 600; const width = 1200; const height = 700; modal = new BrowserWindow({ parent: BrowserWindow.getFocusedWindow() || undefined, modal: true, // frame: false, width: width, height: height, minWidth: minWidth, minHeight: minHeight, // autoHideMenuBar: true, // 是否顯示選單欄 // backgroundColor:'#000', // 背景 hasShadow: true, // 陰影 resizable: true, // 視窗是否可以放大 webPreferences: { webviewTag: true, contextIsolation: false, nodeIntegration: true, enableRemoteModule: true, webSecurity: false, }, }); modal.loadURL(root_path + "#/" + path); });
{ path:'/modal', name:'modal', component:() => import('@/views/db-file/text.vue'), },
在渲染程序中傳送命令,引數需要和路由path一致即可開啟視窗
ipcRenderer.send('open-modal','modal')
當我們做到這的時候,我們的新視窗基本上就算是可以開啟了;開啟了以後呢!我們需要向他傳遞一些值,這個時候為了方便區分;如下:
主程式
渲染程序:A渲染程序 主程序:A主程序
子程式(模態框) 渲染程序:B渲染程序 主程序:B主程序
在B渲染程序渲染完成以後(vue中的話是nextTick),傳送命令通知B主程序
ipcRenderer.send('modal-accomplish')
當在B主程序中接收到訊息以後,傳送給A渲染程序;
// 通知模態框渲染完成 ipcMain.on('modal-accomplish',(event,msg)=>{ // 傳送給渲染程序 win.webContents.send("modal-accomplish-state"); })
在A渲染程序中接收
onMounted(()=>{ ipcRenderer.on('modal-accomplish-state',()=>{ console.log('偉大時代'); }) })
A渲染程序接收到值以後在傳送給A主程序
onMounted(()=>{ ipcRenderer.on('modal-accomplish-state',()=>{ console.log('偉大時代'); ipcRenderer.send('modal-accomplish-end','傳值'); }) })
A主程序接收到值以後傳送給B渲染程序
ipcMain.on('modal-accomplish-end',(event,token)=>{ modal.webContents.send('modal-accomplish-child-end',token); })
B渲染程序接收值
ipcRenderer.on('modal-accomplish-child-end',(event,msg)=>{ console.log(msg); // 傳值 })
以上五/六步就可以將值獲取到了;你學會了嗎?
以上看起來可以能些許複雜,你多練習兩次就覺得還好了!這也是為了避免一些問題想出來的;大家可以參考;有更好的方法也可以留言討論
注意 如果你在寫了程式碼以後沒有接收到值的話,可以重啟一下;可能是你寫了主程序程式碼更新不及時導致的
以上就是electron建立新視窗模態框並實現主程序傳值給子程序的詳細內容,更多關於electron模態框主程序傳值子程序的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45