vue配置多页面的实现方法

yizhihongxing

关于Vue配置多页面的实现方法,下面是一个完整的攻略。

1. 安装依赖

在开始前,需要安装vue-loadervue-template-compiler这两个依赖。

npm install vue-loader vue-template-compiler --save-dev

2. 配置webpack

在webpack配置文件中,需要做如下修改。

  1. entry属性中配置多个入口文件。
module.exports = {
  // 入口文件
  entry: {
    page1: './src/page1/index.js',
    page2: './src/page2/index.js',
    // ...
  },
  // ...
}
  1. 定义多个HtmlWebpackPlugin实例,每个HtmlWebpackPlugin实例为一个页面生成HTML文件。
// 生成的文件名
const filenames = Object.keys(config.entry);

// 遍历生成HTML的配置列表
const htmlPlugins = filenames.map(name => {
  return new HtmlWebpackPlugin({
    // 文件名
    filename: `${name}.html`,
    // 模板文件
    template: `./src/${name}/index.html`,
    // 入口文件
    chunks: [name],
    // 压缩选项
    minify: isPro ? {...} : false,
    // ...
  })
})

module.exports = {
  // ...
  plugins: [
    // HtmlWebpackPlugin实例
    ...htmlPlugins,
    // ...
  ]
}

3. 编写页面文件

page1为例,页面文件目录结构如下:

src/
└── page1/
    ├── index.js
    ├── index.html
    └── App.vue

其中,index.html文件需要引入page1.js

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Page1</title>
</head>
<body>
  <div id="app"></div>
  <script src="./page1.js"></script>
</body>
</html>

index.js文件中需要导入Vue,以及App.vue组件,并且将App.vue组件挂载到#app元素上。

import Vue from 'vue'
import App from './App.vue'

new Vue({
  el: '#app',
  render: h => h(App)
})

App.vue文件中可以正常写Vue组件内容。

<template>
  <div>Hello, page1!</div>
</template>

<script>
export default {
  name: 'App'
}
</script>

4. 示例说明

假设现在我们需要开发两个页面,page1页面和page2页面。

示例1:查询页面

page1页面是一个查询页面,包含一个表单和一个查询结果列表。

  1. src/中新建文件夹,命名为page1,并在该文件夹中创建index.jsindex.htmlApp.vue三个文件,具体内容见上述示例。

  2. 新建Form.vueList.vue两个组件文件,在App.vue中引入这两个组件。

<template>
  <div>
    <Form></Form>
    <List></List>
  </div>
</template>

<script>
import Form from './Form.vue'
import List from './List.vue'

export default {
  name: 'App',
  components: { Form, List }
}
</script>
  1. Form.vue中编写表单内容。
<template>
  <form>
    <div>
      <label>日期</label>
      <input type="date" v-model="date">
    </div>
    <div>
      <button type="submit" @click.prevent="handleSubmit">查询</button>
    </div>
  </form>
</template>

<script>
export default {
  name: 'Form',
  data() {
    return {
      date: ''
    }
  },
  methods: {
    handleSubmit() {
      // 处理查询逻辑
    }
  }
}
</script>
  1. List.vue中编写查询结果列表内容。
<template>
  <table>
    <thead>
      <tr>
        <th>日期</th>
        <th>成交量</th>
        <th>价格</th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="record in records" :key="record.date">
        <td>{{ record.date }}</td>
        <td>{{ record.volume }}</td>
        <td>{{ record.price }}</td>
      </tr>
    </tbody>
  </table>
</template>

<script>
export default {
  name: 'List',
  data() {
    return {
      records: [
        { date: '2020-01-01', volume: '100', price: '100' },
        { date: '2020-01-02', volume: '200', price: '98' },
        { date: '2020-01-03', volume: '150', price: '102' },
        // ...
      ]
    }
  }
}
</script>
  1. index.html中引入需要的样式文件和JS文件。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Page1</title>
  <link rel="stylesheet" href="./index.css">
</head>
<body>
  <div id="app"></div>
  <script src="./page1.js"></script>
</body>
</html>
  1. webpack.config.js中添加css-loadervue-style-loader配置。
module.exports = {
  module: {
    rules: [
      {
        // 处理CSS文件
        test: /\.css$/,
        use: ['vue-style-loader', 'css-loader']
      },
      // ...
    ]
  },
  // ...
}
  1. 运行npm run dev查看页面效果。

示例2:音乐播放器

page2页面是一个音乐播放器,包含音乐列表和播放控制条。

  1. src/中新建文件夹,命名为page2,并在该文件夹中创建index.jsindex.htmlApp.vue三个文件,具体内容见上述示例。

  2. 新建List.vueControls.vue两个组件文件,在App.vue中引入这两个组件。

<template>
  <div>
    <List></List>
    <Controls></Controls>
  </div>
</template>

<script>
import List from './List.vue'
import Controls from './Controls.vue'

export default {
  name: 'App',
  components: { List, Controls }
}
</script>
  1. List.vue中编写音乐列表内容。
<template>
  <ul>
    <li v-for="song in songs" :key="song.id" @click="handleSelect(song)">
      {{ song.name }}
    </li>
  </ul>
</template>

<script>
export default {
  name: 'List',
  props: { songs: Array },
  methods: {
    handleSelect(song) {
      this.$emit('select', song)
    }
  }
}
</script>
  1. Controls.vue中编写播放控制条内容。
<template>
  <div>
    <button @click="handlePrev">上一曲</button>
    <button @click="handlePlay">{{ isPlaying ? '暂停' : '播放' }}</button>
    <button @click="handleNext">下一曲</button>
  </div>
</template>

<script>
export default {
  name: 'Controls',
  props: { isPlaying: Boolean },
  methods: {
    handlePrev() {
      this.$emit('prev')
    },
    handlePlay() {
      this.$emit('play')
    },
    handleNext() {
      this.$emit('next')
    }
  }
}
</script>
  1. index.html中引入需要的样式文件和JS文件。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Page2</title>
  <link rel="stylesheet" href="./index.css">
</head>
<body>
  <div id="app"></div>
  <script src="./page2.js"></script>
</body>
</html>
  1. webpack.config.js中添加css-loadervue-style-loader配置。
module.exports = {
  module: {
    rules: [
      {
        // 处理CSS文件
        test: /\.css$/,
        use: ['vue-style-loader', 'css-loader']
      },
      // ...
    ]
  },
  // ...
}
  1. 运行npm run dev查看页面效果。

至此,关于Vue配置多页面的实现方法的攻略介绍完毕。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue配置多页面的实现方法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue源码学习之Object.defineProperty 对数组监听

    下面我来为您介绍一下“Vue源码学习之Object.defineProperty对数组监听”的攻略。 1. Object.defineProperty的基本用法 首先,我们来了解一下Object.defineProperty的基本用法及其作用。 Object.defineProperty是ES5新增的一个API,它可以用来精确添加或修改对象的属性。该方法将直…

    Vue 2023年5月29日
    00
  • 使用npm命令提示: ‘npm’ 不是内部或外部命令,也不是可运行的程序的处理方法

    这个提示表示系统无法识别npm命令,通常是由于npm环境变量配置不正确导致的。要解决这个问题,需要按照以下步骤进行操作: 检查npm是否已正确安装 首先要检查npm是否已经成功安装。可以通过执行以下命令来检查: npm -v 如果成功安装,将会输出npm的版本号,否则会显示“’npm’ 不是内部或外部命令,也不是可运行的程序”等提示。 添加npm环境变量 如…

    Vue 2023年5月27日
    00
  • 详解Vue 自定义hook 函数

    当我执行Vue.js的钩子函数时,我经常感到缺少自定义钩子函数的灵活性。在某些情况下,我需要创建一些在多个组件中共享的逻辑和状态,并将这些逻辑和状态隔离到自定义hook函数中。这就是使用自定义hook函数的场景,本文将为你详细讲解如何使用Vue自定义hook函数的完整攻略。 什么是Vue自定义hook函数? 我们都知道,在Vue.js中,我们可以编写组件和使…

    Vue 2023年5月28日
    00
  • Vue 页面状态保持页面间数据传输的一种方法(推荐)

    为了让大家更好的了解“Vue 页面状态保持页面间数据传输的一种方法(推荐)”,我会提供以下几个方面的攻略: Vue 组件间通信方式分析 Vue 组件间通信方式有多种,包括:props、$emit/$on、Vuex等。其中,props是父组件向子组件通信的方式,而$emit/$on是组件之间自下而上或自上而下进行的广播。 Vuex则是为了解决组件之间数据传递而…

    Vue 2023年5月28日
    00
  • Vue使用lodop实现打印小结

    下面是对“Vue使用lodop实现打印小结”的详细攻略及示例说明。 什么是lodop? lodop是一款国内的Web打印控件,具备传统桌面打印的稳定性和易用性,支持多种打印方式,包括预览打印、直接打印、浏览器弹出打印等,在Web应用中实现打印功能常常使用lodop。 使用lodop实现打印的步骤 第一步:引入lodop 在Vue项目中使用lodop,需要在i…

    Vue 2023年5月27日
    00
  • Vue中Mustache引擎插值语法使用详解

    当我们使用 Vue.js 框架开发项目时,经常需要使用到数据绑定。Vue.js 的模板语法支持使用 Mustache 引擎插值语法进行数据绑定。在这篇文章中,我将详细讲解 Vue.js 中 Mustache 引擎插值语法的使用方法。 什么是Mustache引擎插值语法? Mustache 是一个逻辑模板语法,帮助我们将数据表示在 HTML 页面上。Vue.j…

    Vue 2023年5月27日
    00
  • vue计算属性computed、事件、监听器watch的使用讲解

    下面我将详细讲解“vue计算属性computed、事件、监听器watch的使用讲解”的完整攻略,让你更加深入理解vue中这三个重要的概念。 计算属性computed computed可以理解为计算属性,它可以根据已经存在的数据computed属性(即model中data中的属性)进行计算得到一个新的值,这个新的值可以使用在模板中。computed具有缓存的特…

    Vue 2023年5月28日
    00
  • 一篇文章带你了解vue路由

    一篇文章带你了解Vue路由 什么是Vue路由 Vue路由管理的是Vue应用程序中的页面导航,它是Vue框架中的一个重要组件。在单页应用程序中,页面的切换并不会引起浏览器刷新,这一过程是通过Vue路由来完成的。 Vue路由的实现原理是在应用程序中添加观察者模式,当用户进行页面导航时,Vue路由会根据用户的请求,实时更新页面内容,并将导航历史记录添加到浏览器的历…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部