0. 开发准备

    安装好 vscode 、npm / yarn,安装方法见百度。

 

1. Electron-vue 安装

# 如果没有 vue-cli 的话需要全局安装
npm install -g vue-cli
# 然后使用 vue
-cli 来安装 electron-vue 的模板 vue init simulatedgreg/electron-vue grpc-client-electron-vue
# 安装依赖 cd grpc-client-electron-vue yarn # or npm
install
# 进入开发模式 yarn run dev # or npm run dev

 注1:运行完命令 vue init simulatedgreg/electron-vue hello-world 后,除了 ESLint 选项按 N 键选 no 外,其他一路按 Enter 键选择默认配置即可。如下图所示:

(EsLint 校验,主要用来规范开发人员的代码。但有些像缩进、空格、空白行之类的规范,会导致在开发过程中一直报错,选择关闭)

 

注2:当 node 版本高于 12 的时候,会报错:

Html Webpack Plugin:

  ReferenceError: process is not defined

解决方法:打开.electron-vue 文件夹中的 webpack.web.config.js 和 .electron-vue/webpack.renderer.config.js,

在 HtmlWebpackPlugin,添加 templateParameters,如下图所示:

templateParameters(compilation, assets, options) {
        return {
          compilation: compilation,
          webpack: compilation.getStats().toJson(),
          webpackConfig: compilation.options,
          htmlWebpackPlugin: {
            files: assets,
            options: options
          },
          process,
        };
      },

 

注:后面的内容(2/3/4/5)如果不用 BootStrap 则忽略。

2. 将 Bootstrap 和 BootstrapVue 添加到项目中

# With yarn
yarn add bootstrap-vue bootstrap axios
# With npm
npm install bootstrap-vue bootstrap axios

 

3. 设置 BootstrapVue

接下来,让我们设置刚刚安装的 BootstrapVue 包。转到 src/render/main.js 文件并将这行代码添加到顶部:

import BootstrapVue from 'bootstrap-vue'
Vue.use(BootstrapVue)

在这里做的事情非常简单,我们导入了 BoostrapVue 包,然后用 Vue.use() 函数在程序中注册它,以便 Vue 程序可以识别。

我们还需要将 Bootstrap CSS 文件导入到项目中。将这段代码段添加到 main.js 文件中:

import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap-vue/dist/bootstrap-vue.css'
在将必要的模块导入 Vue 程序后,你的 main.js 文件应该和下面的代码段类似:
import Vue from 'vue'
import axios from 'axios'

import App from './App'
import router from './router'
import store from './store'

import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap-vue/dist/bootstrap-vue.css'
import BootstrapVue from 'bootstrap-vue'
Vue.use(BootstrapVue)

if (!process.env.IS_WEB) Vue.use(require('vue-electron'))
Vue.http = Vue.prototype.$http = axios
Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  components: { App },
  router,
  store,
  template: '<App/>'
}).$mount('#app')
View Code

 

4.创建包含 Bootstrap 组件的 vue 组件

下面开始创建我们的第一个组件,第一个组件是 Navbar 组件在 components 目录下创建一个名为 Navbar.vue 的文件,并使用以下代码更新它:

//src/components/Navbar.vue
<template>
    <div>
      <b-navbar toggleable="lg" type="dark" variant="success">
        <b-container>
            <b-navbar-brand href="#">Mealzers</b-navbar-brand>
            <b-navbar-toggle target="nav-collapse"></b-navbar-toggle>
            <b-collapse id="nav-collapse" is-nav>
              <!-- Right aligned nav items -->
              <b-navbar-nav class="ml-auto">
                <b-nav-form>
                  <b-form-input 
                    size="sm" 
                    class="mr-sm-2" 
                    placeholder="Search for a meal"
                    v-model="meal"
                    ></b-form-input>
                  <b-button 
                    size="sm" 
                    class="my-2 my-sm-0" 
                    type="submit" 
                    @click.prevent="getMeal"
                    >Search</b-button>
                </b-nav-form>
                <b-nav-item-dropdown right>
                  <!-- Using 'button-content' slot -->
                  <template slot="button-content"><em>User</em></template>
                  <b-dropdown-item href="#">Profile</b-dropdown-item>
                  <b-dropdown-item href="#">Sign Out</b-dropdown-item>
                </b-nav-item-dropdown>
              </b-navbar-nav>
            </b-collapse>
          </b-container>
      </b-navbar>
    </div>  
</template>
<script>
export default {
    data() {
        return {
            meal: ''
        }
    },
  methods: {
    getMeal() {
      
    }
  }
}    
</script>
View Code

Navbar 组件中包含几个 BootstrapVue 组件,其中一个是 b-navbar 组件。它是 Navbar 中其他组件的父组件。如果没有这个组件,Navbar 中的所有其他组件将无法正确呈现。

可以用 type 属性更改 Navbar 上的文本颜色。Navbar 的 background-color 也可以用 variant 属性来改变。这些颜色可以是任何正常的 Bootstrap 默认颜色 —— infoprimarysuccess 等。

另一个是 b-navbar-brand 组件这是可以呈现网站徽标的地方。它还包含 variant type 属性,它们可以分别用于改变 background-color text-color

其他 BootstrapVue 组件是:

  • b-nav-form
  • b-nav-item-dropdown
  • b-dropdown-item
  • b-navbar-toggle
  • b-collapse
  • b-nav-item(可以用“disabled”属性禁用)
  • b-navbar-nav
  • b-nav-item.
  • 更多

BootstrapVue 组件的一个美妙之处在于它们默认是响应式的。所以你无需编写额外的代码或用外部库来使其实现响应式。

还有一个组件是 Card 组件。card 组件允许我们在卡中显示图像、文本等。它写做 b-card 为了演示它,让我们在 components 目录中创建一个 Cards.vue 文件然后用下面的代码更新其内容:

<template>
  <b-container>
    <div v-if="meals.length">
      <b-row>
        <div v-bind:key="data.index" v-for="data in meals">
          <b-col l="4">
            <b-card
              v-bind:title="data.strCategory"
              v-bind:img-src="data.strCategoryThumb"
              img-alt="Image"
              img-top
              tag="article"
              style="max-width: 20rem;"
              class="mb-2">
              <b-card-text>{{ `${data.strCategoryDescription.slice(0,100)}...` }}</b-card-text>
              <b-button href="#" variant="primary">View food</b-button>
            </b-card>
          </b-col>
        </div>
      </b-row>
    </div>
    <div v-else>
      <h5>No meals available yet 😢</h5>
    </div>
  </b-container>
</template>
<script>
import axios from "axios";
export default {
  data() {
    return {
      meals: []
    };
  },
  mounted() {
    axios
      .get("https://www.themealdb.com/api/json/v1/1/categories.php")
      .then(response => {
        this.meals = response.data.categories;
      })
      .catch(err => {
        console.log(err);
      });
  }
};
</script>
View Code

 

5. 渲染包含 Bootstrap 组件的 vue 组件

为了渲染之前创建的 Navbar、Cards 组件,需要修改 LandingPage.vue 文件。打开它并使用以下代码更新:

<template>
  <div id="wrapper">
    <img id="logo" src="~@/assets/logo.png" alt="electron-vue">
    <main>
      <div class="top-side">
        <span class="title">
          Welcome to your new project!
        </span>
        <system-information></system-information>
      </div>

      <div class="bottom-side">
        <navbar/>
        <cards />
      </div>
    </main>
  </div>
</template>

<script>
  import Navbar from './Navbar.vue'
  import Cards from './Cards.vue'
  import SystemInformation from './LandingPage/SystemInformation'

  export default {
    name: 'landing-page',
    components: { SystemInformation, Cards, Navbar },
    methods: {
      open (link) {
        this.$electron.shell.openExternal(link)
      }
    }
  }
</script>

<style>
  @import url('https://fonts.googleapis.com/css?family=Source+Sans+Pro');

  * {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
  }

  body { font-family: 'Source Sans Pro', sans-serif; }

  #wrapper {
    background:
      radial-gradient(
        ellipse at top left,
        rgba(255, 255, 255, 1) 40%,
        rgba(229, 229, 229, .9) 100%
      );
    height: 100vh;
    padding: 60px 80px;
    width: 100vw;
  }

  #logo {
    height: auto;
    margin-bottom: 20px;
    width: 420px;
  }

  main {
    display: flex;
    justify-content: space-between;
  }

  main > div { flex-basis: 50%; }

  .left-side {
    display: flex;
    flex-direction: column;
  }

  .welcome {
    color: #555;
    font-size: 23px;
    margin-bottom: 10px;
  }

  .title {
    color: #2c3e50;
    font-size: 20px;
    font-weight: bold;
    margin-bottom: 6px;
  }

  .title.alt {
    font-size: 18px;
    margin-bottom: 10px;
  }

  .doc p {
    color: black;
    margin-bottom: 10px;
  }

  .doc button {
    font-size: .8em;
    cursor: pointer;
    outline: none;
    padding: 0.75em 2em;
    border-radius: 2em;
    display: inline-block;
    color: #fff;
    background-color: #4fc08d;
    transition: all 0.15s ease;
    box-sizing: border-box;
    border: 1px solid #4fc08d;
  }

  .doc button.alt {
    color: #42b983;
    background-color: transparent;
  }
</style>
View Code

在这里做的是创建一个 Navbar、Cards 组件并将其嵌入到 LandingPage.vue 文件中,这时再运行 yarn run dev 命令,可以看到我们的 Demo 程序运行如下:

 

 

参考:electron-vue从入门到精通(一)

   快速上手BootstrapVue

 

posted on 2020-12-09 16:37  青叶煮酒  阅读(3392)  评论(0编辑  收藏  举报