Vue框架

内容管理

  • Vue
  • Vue前置内容
    • ES6模块化
      • 默认导出【暴露】和默认导入
      • 按需导入和按需导出
      • 直接导入并执行模块中的代码
    • 安装node,vue
      • 安装vue
      • 创建vue项目
        • vue create
        • vue init webpack
    • promise 解决回调地狱
      • 回调函数的实例 -- 顺序读取文件
        • 使用fs模块 -- 回调函数读取文件
        • 使用then-fs读取文件内容【promise】
      • 通过.catch捕获错误,.finally进行强制执行
      • Promise的静态方法 --- Promise.all()
      • Promise的静态方法 --- Promise.race()
      • 基于Promise封装读文件的方法
    • async/await简化promise
    • EventLoop
      • 同步任务【JavaScript主线程执行】
      • 异步任务 【宿主环境执行】
    • 宏任务与微任务
      • 宏任务 macrostack
      • 微任务microstack
    • API接口实例
      • 创建服务器 app.js
      • 创建db数据库操作模块
      • 创建user_ctrl模块
      • 创建user_router模块
      • 使用try--catch捕获异常

Vue基础


Vue框架是当前前端最火的框架,这里为了后期配合springBoot框架完成一个完整项目的搭建

Vue

Vue是一套构建用户界面的渐进式JavaScript框架【渐进式: 可以自底向上逐层应用,简单的应用就只需要小巧的核心库,复杂的可以引入各式各样的Vue插件】

Vue的优点 :

  1. 采用组件化的模式,提高代码的复用率,让代码更好维护,比如一个图片的切换的部分就可以将其变成一个vue的文件
  2. 声明式编码,让编码人员无需注解操作DOM,提高开发的效率
//命令式编码
let htmlStr = '';
persons.forEach(p => {htmlStr += `<li>${p.id} - ${p.name} - ${p.age}</li>`;
});
//获取list元素
let list = document.getElementById('list');
//修改内容,手动操作DOM
list.innerHTML = htmlstr;

对应的,如果使用声明式编码

<ul id = 'list'><li v-for="p in persons">{{p.id} - {p.name} - {p.age}}</li>
</ul>
  1. 虚拟DOM,采用Diff算法进行优化,提高复用 ---- 如果原来的数据生成一个列表,现在的列表多了一些数据,那么vue就采用的虚拟DOM,数据先转化为虚拟的DOM,再转化为真实的DOM

Vue前置内容

ES6模块化

模块化就是将js文件分解为各个功能不同的js文件,每一个js文件就是一个独立的模块,每一个模块就对应界面上的一个部分,但是模块化管理,很多的数据要进行共享,就需要遵守一个规范,现在的标准的规范就是ES6

在node.js中遵循的是CommonJS的模块化规范,其中:

  • 导入其他模块中使用require()方法

  • 模块对外共享成员使用module.exports对象

模块化的好处就是模块化和规范化,降低沟通的成本,方便各模块的相互调用; 比如像导航栏就可以单独弄成一个小的模块,这样就可以复用
在ES6模块化规范之前,还有其他的各种各样的模块,AMD和CMD等,但是这些小的规范都是局限的,而ES6模块化的出现就解决了杂乱,直接统一进行管理。

ES6模块化规范是浏览器端和服务器端 的通用的模块化开发规范。在其中定义了:

  1. 每一个js文件都是一个独立的模块
  2. 导入其他的模块的成员使用import关键字
  3. 向外共享模块成员使用export关键字

ES6模块化主要包含3中用法:

  1. 默认导出与默认导入
  2. 按需导出与按需导入
  3. 直接导入并执行模块中的代码

在项目中打开package.json,加入type:module

{"type": "module","name": "vue01","version": "1.0.0","description": "first project","author": "Cfeng","private": true,"scripts": {"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js","start": "npm run dev","build": "node build/build.js"},"dependencies": {"vue": "^2.5.2","vue-router": "^3.0.1"},

导入和导出操作的都是JSON对象,导入导出可以是默认的也就是找不到固定的export的JSON,就会直接导入默认的,所以导入的时候可以是任何的名称

默认导出【暴露】和默认导入

默认导出就是将js中的成员导出供其他的js文件的使用

export default 默认导出的成员  //默认导出的成员各种都可以,将他们放到{}中

要注意每一个模块只能允许使用唯一的一次的默认导出export default,否则就会报错

这里可以简单示范一下

//这里just作为ES6测试,ES6的出现是必然的趋势,模块化的管理方便js文件的复用,降低耦合度//默认导出、暴露
let num1 = 2022;function show(){alert("hello,es6");
}export default { //向外共享的数据,这样其他的模块就可以接收到num1,show
}export default {show
}

想要检查是否成功运行,就是用node的命令,node XX 就可以执行文件

PS D:\Vueprogramm\vue01> node Export.js
file:///D:/Vueprogramm/vue01/Export.js:15
export default {SyntaxError: Identifier '.default' has already been declaredat ESMLoader.moduleStrategy (node:internal/modules/esm/translators:115:18)at ESMLoader.moduleProvider (node:internal/modules/esm/loader:289:14)at async link (node:internal/modules/esm/module_job:70:21)

这里就发现了只能使用一次默认导出,因为默认导入就是接收默认导出的,如果多个默认导出,就不知道具体要接收那个的数据【数据是可能出现不同的变量的值的】

这里编写一个简单的Export.js文件来进行模拟

//这里just作为ES6测试,ES6的出现是必然的趋势,模块化的管理方便js文件的复用,降低耦合度//默认导出、暴露
let num1 = 10;function show(){alert("hello,es6");
}export default { //向外共享的数据,这样其他的模块就可以接收到num1,show
}

默认导入就是将已经共享了的数据成员给引入使用,默认导入的语法

import 接收名称 from '模块标识符'   //这里就是从执行的共享的文件中接收指定名称的方法或者成员

这里的模块名称是一个字符串,使用单引号。默认导入使用任意的名称都可以,只要合法即可;不能以数字开头

这里编写一个Imprort文件来进行模拟接收的一方

//Import文件模拟的是另外一个需要使用另外一个模块的数据//从Export文件中接收数据,首先得到方法
import num1 from './Export.js'      //需要注意这里引入的时候这是前台的路径,写成Export.js会是识别为资源路径
console.log(num1);

这里直接使用node的命令来进行运行js文件; 这里的num1接收的是放入的JSON的数据,不只是其中某一个数据; 因为默认导出的时候没有名称,所以接收的时候可以为任意的合法的名称;同时因为默认导出没有指定名称,所以这里就只能有一个default,不能有多个默认的default

PS D:\Vueprogramm\vue01> node Import.js
{ num1: 2022, show: [Function: show] }

需要注意的是要使用ES6的模块化规范,就必须要修改JavaScript的配置,在根结点中要加入type: 'module'

按需导入和按需导出

按需导出的语法就是export 导出的成员

//这里就修改一下上面的导入导出的数据
//按需导出就是简单在声明变量的时候加上一个export关键字即可,导入的时候接收的就是导出的成员的JSON格式
export let num1 = 2022;export function show(){   //这里就是将这两个变量进行了按需导出alert("hello,es6");
}

按需导入就是import {成员的名称} from '模块名称' //模块名称就是导入的位置 —>这里的位置为前台路径; 想要导入多个值也容易,就是在大括号中放入多个成员,成员之间使用,来进行分割【在HBuilderX中写好路径之后,前面的成员就可以识别

//Import文件模拟的是另外一个需要使用另外一个模块的数据//从Export文件中接收数据,首先得到方法
import {num1,show} from './Export.js'console.log(num1);//因为已经导入了成员,就可以直接进行使用

这里运行得到的就是一个具体的

PS D:\Vueprogramm\vue01> node Import.js
2022
  • 每一个js文件【模块】中可以使用多次按需导出,但是只能使用一次默认导出
  • 按需导入的成员的名称必须和按需导出的名称保持一致
  • 按需导入可以和默认导入一起使用
//默认导入的时候名称是任意的,指代的就是之前默认导出的那个JSON对象
import info,{num1 as year,show} from './Export.js'      //info就是默认导出的空的JSON对象PS D:\Vueprogramm\vue01> node Import.js
{}
  • 按需导入的时候可以使用as进行重命名
import {num1 as year,show} from './Export.js'console.log(year);//因为已经导入了成员,就可以直接进行使用

使用as重命名和之前的Mysql中取别名是类似的

直接导入并执行模块中的代码

如果只是像单纯地执行某个模块中的代码,但是不需要得到模块向外共享的成员,这个时候就可以直接导入并执行模块代码

import '模块路径'

这里可以简单演示一下

//被导入的模块的代码Export.js
//直接导入就是不需要得到被导入模块的数据,只是单纯执行模块的代码,就和之前在html中链入JavaScript代码类似
let year = 2022;
console.log(year + " 新年快乐呀");  //这里在HBuilderx中如果不小心按ins键,可能会改变光标为下横线,这个时候再按一次即可//导入的模块Import.js
//直接导入就类似之前的html的链入,只是简单的执行代码,而不需要使用数据
console.log("今年是哪一年呢?");
import './Export.js';

执行的结果为

PS D:\Vueprogramm\vue01> node Import.js
2022 新年快乐呀
今年是哪一年呢?

这里可以看出来导入的模块就是最先执行,不管是在之前还是之后进行导入,最先执行import语句

安装node,vue

这里我就简单在HBuilderX中的节点中加入即可,否则就会报错 : Cannot use import statement outside a module,这里就引入外部的js文件的时候就不用写text/javaScrit

这里还是有问题,因为ES6模块化,这里就在HBuilerX中配置一下node方便直接运行js文件,而不需要再链入html中在下载node之前,这里解释几个名词:

webpack : 主要的用途就是通过CommonJS的语法把所有的浏览器需要发布的静态资源做相关的准备,比如对资源进行打包

vue-cil: 用户生成的Vue工程的模板,和IDEA中的archetype类似,就是帮助快速建立一个vue的项目,只需要npm install就可以安装;Vue3之后换成了@vue/cil

这里安装node就简单在官网上进行下载: Node.js (nodejs.org)

安装成功之后会显示: C:\Users\OMEY-PC>node -v
v16.14.0

这里的node其实和之前的maven有些类似,安装的时候可以参考maven的过程,也有本地仓库cache和镜像;maven是repository

可以使用npm config ls来查看npm的配置信息 --- ls 就是list的简写//可以使用npm命令来进行修改
修改prefix的值:npm config set prefix 【全局仓库地址】
修改cache的值:npm config set cache【全局缓存地址】//简单一点就是直接在文件中进行修改就是C盘用户的.npmrc
registry=http://registry.npm.taobao.org
prefix=D:\nodejs\node_global
cache=D:\nodejs\node_cache在记事本中输入即可,第一个是配置镜像,和maven相同可以加快下载的速度//使用npm list -global查看本地仓库的信息
C:\Users\OMEY-PC>npm list -global
D:\nodejs\node_global
`-- (empty)//检查镜像站是否成功
C:\Users\OMEY-PC>npm config get registry
http://registry.npm.taobao.org///npm info vue 查看是否能够获得vue
S C:\Windows\system32> Npm info vuevue@3.2.31 | MIT | deps: 5 | versions: 370
The progressive JavaScript framework for building modern web UI.
https://github.com/vuejs/core/tree/main/packages/vue#readmedist
.tarball: https://registry.npmmirror.com/vue/-/vue-3.2.31.tgz
.shasum: e0c49924335e9f188352816788a4cca10f817ce6
.integrity: sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==
.unpackedSize: 2.5 MB注意必须要以管理员身份运行cmd窗口

npm install xx -g 就是安装或者更新xx模块到设置的node_global中

这里就更新一下npm模块PS C:\Windows\system32> npm list -global
D:\nodejs\node_global
`-- npm@8.5.0

这个时候modules的位置就发生了变化,所以需要配置环境变量NODE_PATH :

安装vue

  • 安装vue ,使用命令 npm install vue -g

  • 安装vue-router,使用命令npm install vue-router -g,安装之后仓库中的dist就是distribution就是发布的产品,也就是需要的文件

  • 安装vue-cli 使用命令npm install vue-cli -g 安装vue的脚手架

接下来要正常使用vue,需要配置环境变量,否则就要在当前目录打开cmd窗口【vue.cmd在node_global下面】,在path中加上路径即可

测试是否配置成功,输入命令vue -V

C:\Users\OMEY-PC>vue -V
2.9.6

脚手架vue-cil中的模板包括webpack和webpack-simple,后者简单一点

创建vue项目

vue create

跳转到项目放置的位置,然后vue create xxx

vue create vue01 //创建项目
cd vue01   //进入项目
npm run serve  运行,这个时候访问就localhost就可以运行项目

vue init webpack

这里使用vue的命令来初始化vue01

vue init webpack vue01  //初始化项目cd vue01
npm install  //安装依赖npm run dev //运行 --- 进入localst:8080/#/或者
npm run  build  //直接打开dist文件夹下生成的index.html文件

注意创建项目的时候想要将项目放到哪里,就先将cmd命令跳转到哪里,必须要以管理员身份来运行

PS D:\Vueprogramm> vue init webpack vue01'git' �����ڲ����ⲿ���Ҳ���ǿ����еij���
�������ļ�
? Project name vue01
? Project description first project
? Author Cfeng
? Vue build standalone
? Install vue-router? Yes
? Use ESLint to lint your code? No
? Set up unit tests No
? Setup e2e tests with Nightwatch? No
? Should we run `npm install` for you after the project has been created? (recommended) npmvue-cli · Generated "vue01".# Installing project dependencies ..

还可以使用可视化的vue的界面,需要3以上的版本

PS C:\Windows\system32> vue ui
												

Vue铺垫知识 --- ES6模块化相关推荐

  1. 【Vue.js 知识量化】ES6 语法积累

    ES6 语法 let / var const 的使用 class.extends.super 箭头函数(arrow function) 模版字符串(template string) 结构(destru ...

  2. Vue学习(增删改查、ES6模块化概念)-学习笔记

    文章目录 Vue学习(增删改查.ES6模块化概念)-学习笔记 增删改查案例 ES6模块化概念 Vue学习(增删改查.ES6模块化概念)-学习笔记 增删改查案例 <!DOCTYPE html> ...

  3. 【Vue.js 知识量化】组件化开发 + 前端模块化

    Vue.js 组件化开发 组件化 认识组件化 注册组件 全局组件和局部组件 父子组件 组件数据 父子组件的通信 父->子:props 子->父:$emit() 父子组件的访问方式 $chi ...

  4. vue项目引入不符合ES6模块化标准的JS文件

    vue项目引入不符合ES6模块化标准的JS文件 实现方式 实现原理 实现方式 要引入的文件放在public目录下,在index.html中通过script标签引入 实现原理 参考vue官网–处理静态资 ...

  5. vue详细知识,语法和必备知识

    文章目录 目录 1.vue简介 1.1 vue是什么 1.2 Vue的特点 1.3 学习Vue之前需要掌握哪些JavaScript基础知识 1.4 初识vue需要知道的地方 2. vue的核心基础 2 ...

  6. vue基础知识之vue-resource/axios

    Vue基础知识之vue-resource和axios(三) vue-resource Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没有必 ...

  7. 前端工程化(ES6模块化和webpack打包)

    文章目录 目标: 目录: 1.模块化相关规范 1.1.模块化概述 1.2.浏览器端模块化规范 AMD CMD 1.3.服务器端模块化规范 CommonJS 1.4.大一统的模块化规范-ES6模块化 1 ...

  8. 欢迎查看Vue总结知识

    标题 欢迎查看Vue总结知识 一. VUE:用于构建用户界面的渐进式 框架 可以将项目的一部分使用vue实现,也可以使用Vue实现整个项目 二. 特点 易用:会html.css.js更快上手 灵活:不 ...

  9. 史上最详细易懂的ES6模块化语法(重点)

    对于初次学习ES6的小伙伴来说,ES6的模块化语法是一个重点,在没有模块化之前,前端js代码有一下三句话 1.私密不漏 2.重名不怕 3.依赖不乱 一.接下来先演示在没有模块化之前,这个"私 ...

最新文章

  1. java swing中英文支持,java - Swing国际化 - 如何在运行时更新语言 - SO中文参考 - www.soinside.com...
  2. java 后台路线学习
  3. 同事给我埋了个坑:Insert into select语句把生产服务器炸了
  4. css盒模型和元素绘制
  5. UVA 11021 - Tribles(概率递推)
  6. Android Wear计时器开发
  7. 产品开发项目中文档的重要性
  8. MySQL 表和列的注释的添加以及查看
  9. ES9新特性_ES9正则扩展-反向断言---JavaScript_ECMAScript_ES6-ES11新特性工作笔记055
  10. python 详解re模块
  11. 计算机网络知识点总结
  12. Python学习笔记2:indent expected、unindent does not match any outer indentation level
  13. 神经网络训练用什么软件,神经网络训练ai玩游戏
  14. 2016 0CTF rsa
  15. Python-.item()的理解与使用
  16. 滴滴校招笔试题及解析
  17. 如何在Ubuntu 20.04上设置和配置证书颁发机构(CA)
  18. 选择适合你的虚拟现实体验
  19. java基础基础理论知识归纳(一)
  20. python微信聊天机器人源码_Python的微信二次开发!实战微信智能聊天机器人!

热门文章

  1. 【ABAP】生产订单收货增强控制
  2. blog-数据仓库维度建模系列--缓慢变化维(SCD)的思考(一)
  3. Kademlia协议
  4. 英伟达显卡驱动和SteamVR相冲突
  5. 线上资讯周 | 香港科大商学院MSc项目
  6. 中国APM市场份额第一!博睿数据实力领跑
  7. 新浪微博是什么语言php,新浪微博api(js|php)
  8. python中glob_python中的glob模块
  9. 批量图片去底色,用压缩图工具怎么操作
  10. 快速开发微信小程序之二-微信支付