请简述什么是Vue组件化开发_vue组件化开发

请简述什么是Vue组件化开发_vue组件化开发前言真实项目开发过程中,我们都是使用组件化的去开发vue的项目,但是组件化的思想又是如何来的呢?下面就从开始讲解演变过程演变过程1.0一般情况下vue都是单页面开发,所以项目中只会有一个inde

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

真实项目开发过程中,我们都是使用组件化的去开发vue的项目,但是组件化的思想又是如何来的呢?下面就从开始讲解演变过程
 

演变过程1.0

一般情况下vue都是单页面开发,所以项目中只会有一个index.html文件,而且大多数时候这个html中的内容都是固定死的,之前我们都是把模板代码写在html中,现在我们把模板代码抽离出来,写在js文件中,模板代码只写入如下代码

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

我们在js中写入模板代码如下:

import Vue from 'vue'
const app = new Vue({
  el: "#app",
  data: {
    message: "hello",
    name: "jkc"
  },
  methods: {
    btnClick(){
      console.log("test")
    }
  },
  template: `
    <div>
      <h2>{{message}}</h2>
      <button @click="btnClick">按钮</button>
      <h2>{{name}}</h2>
    </div>
  `,
})

上面的template模板中的代码vue内部会自动替换掉html代码中的div标签中的内容,所以我们打包以后,页面展示的都是template中的内容
请简述什么是Vue组件化开发_vue组件化开发

这里我们其实还可以再进阶以下,改成以下代码

import Vue from 'vue'

const App = {
  template: `
    <div>
      <h2>{{message}}</h2>
      <button @click="btnClick">按钮</button>
      <h2>{{name}}</h2>
    </div>
  `,
  data(){
    return{
      message: "hello",
      name: "jkc"
    }
  },
  methods: {
    btnClick(){
      console.log("test")
    }
  },
}

const app = new Vue({
  el: "#app",
  template: `<App></App>`,
  components: {
    App
  }
})

上面代码做的事情:将之前放在父组件中代码,创建一个App对象,然后在父组件中注册,最后在模板中引用该组件,同样我们打包后在页面查看的效果与之前是一样的
 

演变过程2.0

上面我们发现main.js中写的App这个对象代码太多了,在main.js文件中如果有多个,那样会显得很臃肿,所以我们可以把这个对象抽离出来,放在一个单独的js文件中,我们在项目的src文件夹中创建一个vue文件夹,在它下面创建一个app.js文件,将之前main.js中的App对象的代码复制到里面,然后导出

// app.js
export default {
  template: `
    <div>
      <h2>{{message}}</h2>
      <button @click="btnClick">按钮</button>
      <h2>{{name}}</h2>
    </div>
  `,
  data(){
    return{
      message: "hello",
      name: "jkc"
    }
  },
  methods: {
    btnClick(){
      console.log("test")
    }
  },
}

然后在main.js中从app.js中导入App

import App from './vue/app'

最后在打包,页面展示的效果还是一样,但是我们把组件抽离了出来,只是这里是js文件的形式
 

演变过程3.0

上面我们已经将组建抽离出来了,但是templatejs代码还是写在一起,此时我们就需要创建.vue后缀的文件了,文件中会自动帮我们把template模板代码、js代码和css代码分离开来,让结构更加清晰

在Vue文件夹中创建App.vue文件,写入如下代码

<template>
  <div>
    <h2>{{message}}</h2>
    <button @click="btnClick">按钮</button>
    <h2>{{name}}</h2>
  </div>
</template>

<script>
export default {
  name: "App",
  data(){
    return{
      message: "hello",
      name: "jkc"
    }
  },
  methods: {
    btnClick(){
      console.log("test")
    }
  },
}
</script>

<style scoped>

</style>

然后在main.js文件中导入刚刚创建的Vue文件

import App from "./vue/App";

此时我们打包是会报错的,因为我们项目中用到了.vue的组件,所以必须安装vue-loadervue-template-compiler

安装命令如下:

npm install -D vue-loader vue-template-compiler

这样是默认安装最新版本的"vue-loader": "^16.3.0""vue-template-compiler": "^2.6.14",

大坑来袭
这里的坑,博主花了2个小时才采完,太坑了。
注意1:vue-template-compiler的版本一定要与vue的版一致
注意2:最新版本16.3打包会报错,我们安装时需要手动安装15.9.7或者15.0.0都可以,博主亲测可以

安装完成以后,我们需要在webpack中的rules中配置vue

{
  test: /\.vue$/,
  loader: 'vue-loader'
}

又因为我们的vue-loader是15以上的版本,所以必须在你的 webpack 配置中添加 Vue Loader 的插件

const { VueLoaderPlugin } = require('vue-loader')
plugins: [
    // 请确保引入这个插件!
    new VueLoaderPlugin()
]

最后展示完整的webpack配置如下

const { VueLoaderPlugin } = require('vue-loader')
const path = require('path')

module.exports = {
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: "dist/"
  },
  resolve: {
    extensions: ['.json', '.js', '.vue', '.css'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
    },
  },
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
      {
        test: /\.less$/,
        use: [
          'vue-style-loader',
          'css-loader',
          'less-loader'
        ]
      },
      {
        test: /\.png/,
        type: 'asset'
      },
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      }
    ],
  },
  plugins: [
    // 请确保引入这个插件!
    new VueLoaderPlugin()
  ]
}

现在我们打包,就不会报错了,且访问首页有对应的数据

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164846.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • swing58_ML2437A

    swing58_ML2437A给定一个长度为 n 的整数序列,初始时序列为 {1,2,…,n−1,n}。序列中的位置从左到右依次标号为 1∼n。我们用 [l,r] 来表示从位置 l 到位置 r 之间(包括两端点)的所有数字构成的子序列。现在要对该序列进行 m 次操作,每次操作选定一个子序列 [l,r],并将该子序列中的所有数字进行翻转。例如,对于现有序列 1 3 2 4 6 5 7,如果某次操作选定翻转子序列为 [3,6],那么经过这次操作后序列变为 1 3 5 6 4 2 7。请你求出经过 m 次操作后的序列。输入格式第

    2022年8月10日
    7
  • 矩阵的秩及其求法

    矩阵的秩及其求法矩阵的秩及其求法矩阵秩的概念k阶子式矩阵的秩矩阵秩的求法1、子式判别法(定义)2、用初等行变换求矩阵的秩满秩矩阵矩阵秩的概念k阶子式定义1:设A=(aij)m×nA=(a_{ij})_{m\timesn}A=(aij​)m×n​在AAA中任取kkk行kkk列交叉处元素按原相对位置组成的kkk(1≤k≤min{m.n})(1\leqk\leqmin\lbracem.n\rbrace)(1≤k≤min{m.n})阶行列式,称为AAA的一个kkk阶子式。m×nm\timesnm×n的矩阵A

    2022年5月30日
    71
  • LOTO课5:三极管音频放大电路实践[通俗易懂]

    LOTO课5:三极管音频放大电路实践[通俗易懂]我们在项目中经常会遇到音频信号的采集处理,我们今天做一个最简单的音频采集模块。它的电路其实就是在我们上节课的三极管的放大电路上的一个改进,在上一节课三极管放大电路的基础之上,将输出信号换成驻极体话筒,输出端加上截止频率在20KHZ左右的RC低通滤波电路,通过滤波电路来滤除频率在20KHZ以上的噪声信号。上一节课关于三极管放大的文章链接如下:添加链接描述设计的电路原理图如图所示,通过传感器获取一个交流的小信号,经过三级管放大电路放大信号之后再进行输出:等不及打板,手工焊接了一个样品进行试验:通过

    2022年5月3日
    73
  • eclipse中android开发_Android开发教程

    eclipse中android开发_Android开发教程创建第一个Android项目本系列文章主要针对基于Eclipse的IDE下进行Android开发的技术、方法、过程与技巧进行记录。本文将记录,以Win1064位操作系统为例,使用Eclipse创建第一个Android项目,并配置运行的过程。该过程包括:创建Android工程和在Android虚拟设备上运行程序。创建Android工程1)启动Eclipse

    2022年10月4日
    2
  • Scrapy框架及组件描述

    Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非

    2021年12月29日
    50
  • 用 CSS 隐藏页面元素

    用 CSS 隐藏页面元素用 CSS 隐藏页面元素

    2022年4月24日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号