1. 程式人生 > 實用技巧 >electron-vue 中使用Electron Api和nodejs以及主程序渲染通訊

electron-vue 中使用Electron Api和nodejs以及主程序渲染通訊

app.vue

<template>
  <div id="app">

    <div class="header">

        <router-link to='home'>首頁</router-link>


        <router-link to='news'>新聞</router-link>
    </div>
    

    <router-view></router-view>
  </div>
</template>

<
script> export default { name: 'electronvuedemo' } </script> <style> /* CSS */ .header{ height: 44px; line-height: 44px; text-align: center; background: #000; } .header a{ color: #fff; } </style>

router/index.js

import Vue from 'vue'
import Router from 
'vue-router' Vue.use(Router); import Home from '@/components/Home.vue'; import News from '@/components/News.vue'; export default new Router({ routes: [ { path: '/', name: 'home', component:Home }, { path: '/news', name: 'news', component: News }, { path:
'*', redirect: '/' } ] })

home.vue

<template>
  <div id="home">
   
        {{msg}}


        <br>

        <br>

        <button @click="sendMsg()">給主程序廣播資料</button>
 <br>

        <br>

<!-- click.stop 阻止冒泡 

    click.prevent  阻止預設行為
-->

       <a href="http://www.baidu.com" @click.prevent="openUrl($event)">開啟百度</a>
 <br>

        <br>
        <button @click="runNode()">使用nodejs的模組</button>
  </div>
</template>


<script>    


    var path=require('path');

    
    export default{

        data(){

            return {

                msg:'首頁元件'

            }
        },
        methods:{

            sendMsg(){

                alert('執行')
                this.$electron.ipcRenderer.send('toMain','我是渲染程序裡面的資料')
                
            },
            openUrl(event){

                console.log(event.srcElement.href)

                var linkUrl=event.srcElement.href;

                 this.$electron.shell.openExternal(linkUrl);
            },
            runNode(){

                    var dir=path.join('/aaaa','xxxx');

                    console.log(dir);

            }
        }

    }
</script>

news.vue

<template>
  <div id="news">
   新聞元件
    <br>
        <button @click="runNode()">使用nodejs的fs模組</button>

  </div>
</template>


<script>    

    var fs=require('fs');

    export default{

        data(){

            return {

                msg:'我是新聞頁面'

            }
        },
        methods:{

            runNode(){

                    fs.readFile('package.json',(err,data)=>{
                        if(err){

                            console.log(err);
                            return;
                        }

                        console.log(data.toString());
                    })  

                    
            }
        }

    }
</script>

main/icpMain.js

var {ipcMain}=require('electron');


//接收渲染程序廣播的資料

ipcMain.on('toMain',(event,data)=>{

    console.log('1111')
    console.log(data);
})

執行:

npm run dev