Vue学习笔记
Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。
Vue 只关注视图层, 采用自底向上增量开发的设计。
Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
Vue 学习起来非常简单,本教程基于 Vue 2.1.8 版本测试,Vue3 请参阅 Vue3 教程。
环境搭建
Nodejs安装
https://nodejs.org/dist/v16.16.0/node-v16.16.0-x64.msi
官网下载,安装,略
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EJq180pq-1663557232628)(E:\typoraImage\image-20220918180949470.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2IVUGnHt-1663557232629)(E:\typoraImage\image-20220918181013921.png)]
进入控制台,查看对应的版本 node版本,npm的版本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hj84MrkF-1663557232629)(E:\typoraImage\image-20220802114948172.png)]
cnpm安装
npm i -g cnpm --registry=https://registry.npm.taobao.org
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6f0dmNGu-1663557232629)(E:\typoraImage\image-20220802115148170.png)]
VSCode的安装
http://www.456hao.com/tag/vscode
VSCode插件的安装
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LahZ0GfP-1663557232630)(E:\typoraImage\image-20220913162516054.png)]
vue文件的模板
文件 ==> 首选项 ==> 用户代码片段 ==> 输入 vue 然后回车
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pi9Q1ZHl-1663557232630)(E:\typoraImage\image-20220913164245676.png)]
{
"Print to console": {
"prefix": "vue",
"body": [
"<template>",
" <div>",
" $0",
" </div>",
"</template>",
"",
"<script>",
"",
" import { reactive ,toRefs,computed,onMounted,onBeforeMount,onUnmounted} from 'vue';",
" import { ElMessage,ElMessageBox } from 'element-plus';",
" import md5 from 'js-md5';",
" export default {",
" name:'$0',",
" setup(){",
" const data = reactive({})",
" //页面加载完成后执行",
" onMounted(() => {})",
" //页面加载前执行",
" onBeforeMount(()=>{})",
" //销毁",
" onUnmounted(() => {})",
" return{",
" ...toRefs(data),//打散数据对象,在外部就黑直接使用",
" }",
" }",
" }",
"",
"</script>",
"<style scoped>",
"",
"</style>"
],
"description": "Log output to console"
}
}
字体大小写
https://www.cnblogs.com/luzhanshi/p/11993813.html
文件=》首选项=》设置
"editor.mouseWheelZoom": true
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-052Dzu2e-1663557232631)(E:\typoraImage\image-20220918181927946.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LcPYo1yU-1663557232632)(E:\typoraImage\image-20220918182010520.png)]
浏览器插件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RfRjsLNT-1663557232632)(E:\typoraImage\image-20220918191127855.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0yajOCEV-1663557232633)(E:\typoraImage\image-20220918191144704.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o0G4XREQ-1663557232634)(E:\typoraImage\image-20220918191251581.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8m19Zp9e-1663557232634)(E:\typoraImage\image-20220918191337236.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4tnSC2OR-1663557232635)(E:\typoraImage\image-20220918191448539.png)]
安装完成后,F12进入浏览器的调试界面,打开vue选项卡,一路next,完成后,就可以使用vue插件进行调试了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A70tRqJO-1663557232636)(E:\typoraImage\image-20220918192353930.png)]
各种命令介绍
vs_code 开发vue 参考文档
https://www.cnblogs.com/kiba/p/15351265.html
https://www.cnblogs.com/zyskr/p/10609288.html
插件
https://segmentfault.com/a/1190000019203847
https://segmentfault.com/a/1190000014785115
vue-cli的使用
https://www.cnblogs.com/liaoanran/p/8042893.html
vue-cli create 都做了什么
https://www.jianshu.com/p/86b49bb68f54
vue-cli create 创建项目
https://www.cnblogs.com/coober/p/10875647.html
vue开源项目
https://www.sohu.com/a/405500958_463987
vue模板创建
https://www.cnblogs.com/sunyanblog/p/13086497.html
https://segmentfault.com/a/1190000019084920?sort=newest
localstorage与vuex的区别
https://www.jianshu.com/p/2ad1d552727a
https://www.linuxprobe.com/vue-token-linux.html
localStorage与sessionStorage的区别
https://juejin.cn/post/6844903516826255373
可以使用vue-ls进行替换
setup语法糖
https://www.cnblogs.com/onesea/p/15602810.html
https://wenku.baidu.com/view/52feea6828160b4e767f5acfa1c7aa00b52a9d96.html?fr=sogou
各种项目插件安装
安装国内镜像 cnpm,在vsCode的提供的终端执行会报错,在windows的控制台下可以正常运行。
npm i -g cnpm --registry=https://registry.npm.taobao.org
安装less 用于解析css文件的less写法
npm install less less-loader --save
或
npm install less less-loader --save-dev
安装scss
npm install node-sass --save-dev
npm install sass-loader --save-dev
安装vue-router 用于路由管理
cnpm install vue-router --save
或npm install vue-router --save
安装jquery
cnpm install jquery --save 或者 npm install jquery --save
安装axios 用于前后端的通讯
cnpm install axios --save 或 npm install axios --save
安装element-plus(页面插件,可以使用element-plus 注意vue2对应element-ui,vue3对应element-plus)
cnpm install element-plus --save 或 npm install element-plus --save
安装element-plus图标
npm install @element-plus/icons-vue
vuex全局状态管理器(或者只用localstorage保存)
npm install vuex@3.6.2 --save 安装指定的版本
npm install vuex --save 安装最新版本
注意:vue2 对应 vuex3
vue3 对应 vuex4
vue 中的md5加密
npm install js-md5 --save
安装typescript
npm config set registry https://registry.npm.taobao.org
npm config set disturl https://npm.taobao.org/dist
npm -g install typescript
npm install typescript --save
安装 vue-i18n 国际化
npm install vue-i18n --save
安装 Ts
npm install -g typescript
npm install -g ts-loader
npm install -g vue-loader
这里说明一下,如果插件安装进度失败,可以Ctrl+C,停止该命令,重新执行,可以多执行几次
创建项目
新建项目
vue create 项目名 回车
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XXDxnwAG-1663557232637)(E:\typoraImage\image-20220918140901793.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ii9zo5Yv-1663557232637)(E:\typoraImage\image-20220918141026525.png)]
选择vue的版本,我们选择的是vue3
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KfKAqMJP-1663557232638)(E:\typoraImage\image-20220918141056266.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SeOcDIex-1663557232638)(E:\typoraImage\image-20220918141228707.png)]
选择动态css
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ykvfY1bE-1663557232638)(E:\typoraImage\image-20220918141326650.png)]
回车后开始创建项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WLxeaxHA-1663557232639)(E:\typoraImage\image-20220918141414076.png)]
项目创建完毕
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mvKtfnVJ-1663557232639)(E:\typoraImage\image-20220918141441048.png)]
使用vsCode打开项目文件夹,如果在开发过程中还要在项目中安装其他插件,可以打开vscode提供的终端窗口,直接通过命令安装即可
步骤:
新建一个文件夹,使用vscode打开,选择打开终端,如下图,在终端执行下列命令
安装vuecli
npm install -g vue-cli
npm install @vue/cli -g
npm i -g @vue/cli
https://zhuanlan.zhihu.com/p/121826665
https://zhuanlan.zhihu.com/p/43510804
查看版本
vue -V
使用脚手架创建vue项目
vue create 项目名
(注:上面的代码如果终端报错,就在console控制台执行,每创建一个项目,就会新建一个文件夹,使用vs打开的文件夹,实际上是父文件夹)
查看已经安装的插件消息,打开package.json文件,安装项目所需依赖
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rHMaHv97-1663557232639)(E:\typoraImage\image-20220908115918155.png)]
项目结构介绍
https://www.jianshu.com/p/f4e95663e10d
https://jingyan.baidu.com/article/1612d50017033fa20e1eeefe.html
https://baijiahao.baidu.com/s?id=1695710044826816273
https://zhuanlan.zhihu.com/p/105136924
https://www.jb51.net/article/131367.htm
放置路由组件
pages(page) 或 views(view)
vue ui
https://www.jb51.net/article/182196.htm
目录结构
https://www.runoob.com/vue3/vue3-directory-structure.html
首先我们先看以下用 Vue-Cli 创建项目的整体结构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2iQYte7b-1663557232640)(E:\typoraImage\5ed845a109b4cac203360708.jpg)]
项目相关的代码,我们都放在 src 的文件夹中,该文件夹中的结构如下:
- assets 是资源文件夹,通常我们会把图片资源放在里面。
- components 文件夹通常会放一些组件。(通用组件,多个页面共用的组件,header.vue,footer.vue,静态组件,)
- router 文件夹里面放的是 VueRouter 的相关配置(路由的配置,路由(直接替换页面中的某一个部分)----超链接)。
- store 文件夹里面放的是 Vuex 的相关配置(全局变量的保存,或者使用LocalStorage,sessionStorage替代)。
- views 文件夹里面通常放置页面的 .vue 文件(路由的组件,通过超链接访问的vue文件)。
- App.vue 定义了一个根组件(所有的组件都是在App.vue上显示的,),App.vue文件又是在index.html上显示的。
- main.js 是项目的入口文件。
启动
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rbWNd1VQ-1663557232640)(E:\typoraImage\image-20220908084731443.png)]
打开vscode,运行调试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tyvZyMOf-1663557232640)(E:\typoraImage\image-20220908090812219.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h0o4O9EX-1663557232641)(E:\typoraImage\image-20220908090914281.png)]
项目启动后的调试按钮
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OFeEk7bQ-1663557232641)(E:\typoraImage\image-20220908091043698.png)]
启动后的消息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8elqJmhn-1663557232641)(E:\typoraImage\image-20220908091123379.png)]
修改启动的端口号并打开首页,修改package.json文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5FXIeSv8-1663557232642)(E:\typoraImage\image-20220908091316030.png)]
修改后的代码如下
"scripts": {
"serve": "vue-cli-service serve --open --host localhost --port 3000",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
。。。。。。。
--open 自动打开
--host localhost 服务器是localhost
--port 8080 启动端口是8080
其他,处理变量声明后不使用,程序报错,打开vue.config.js
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
lintOnSave : false,
})
修改@符合代表src目录,在项目根目录下新建一个jsconfig.json 文件
{
"compilerOptions": {
"target": "es6",
"module": "esnext",
"baseUrl": "./",
"moduleResolution": "node",
"paths": {
"@/*": [
"src/*"
]
},
"lib": [
"esnext",
"dom",
"dom.iterable",
"scripthost"
]
}
}
基础编程
Vue3 模板语法
插值
文本
v-text,v-html
还可以使用v-text,v-html 输出
1.v-text:会把h1标签转义输出。即原模原样输出,h1标签没效果
2.v-html:会直接输出结果。即h1标签会出效果
指令:v-开头,
把html标签的属性,动态的绑定到vue.js上,当vue的data中的数据发生变化时,html标签属性值也会发生变化
v-bind
语法: v-bind:标签的属性=“vue中data中的变量”
简便的写法 :标签的属性=“vue中data中的变量”
v-on
动态绑定函数。
语法: v-on:事件名=“方法名”
@事件名=“方法名”
Vue3 条件语句
条件判断
v-if,v-else,v-else-if,v-show,当变量值是true就显示,否则就不显示
Vue.js 循环语句
v-for
Vue3 组件
新建组件
导入组件,注册,使用
Vue3 计算属性
computed
双向绑定(v-model)
一般用在有value属性的控件上,在vue3中可以使用ref处理
<!--
:value 等价于 v-bind:value 单向绑定,只有修改vm的变量后,输入框的值才会变化,但是修改输入框的值,变量不会发生变化
v-model:value 双向绑定,简写为 v-model ,修改vm的变量后,输入框的值会变化,修改输入框的值,变量会发生变化
-->
<input type="text" v-model ="message"/>
<hr />
<span>结果是:{{message}}</span>
Vue3 表单
生命周期
高级编程
axios
vuex
localstorage
vue-router(路由)
Vue3 组合式 API
https://juejin.cn/post/7107924518466748453
https://juejin.cn/post/7091823718737362958
https://www.jianshu.com/p/8cf9cb9f9923
前后端分离
Token
jwt
跨域访问(@CrossOrigin 与过滤器)
封装response(map,@ResponseBodyAdvice)
element-plus
虚拟数据网站使用
框架的用法
面包屑导航
菜单
对话框
message 消息框
走马灯
表单(验证方式)
搜索框
table,分页控件
Loading控件
Icon
国际化设置(自定义国际化)
文件上传
tree
项目开发
OA项目(使用vue技术,开发前端,使用springboot+myBatisplus+mysql 实现后端)
其他
nodejs中module.exports和exports的区别
https://zhuanlan.zhihu.com/p/87729137
图片验证码
https://www.jb51.net/article/138526.htm
Nodejs跨域访问
https://www.cnblogs.com/tengrl/p/10729277.html
p/8cf9cb9f9923
前后端分离
Token
jwt
跨域访问(@CrossOrigin 与过滤器)
封装response(map,@ResponseBodyAdvice)
element-plus
虚拟数据网站使用
框架的用法
面包屑导航
菜单
对话框
message 消息框
走马灯
表单(验证方式)
搜索框
table,分页控件
Loading控件
Icon
国际化设置(自定义国际化)
文件上传
tree
项目开发
OA项目(使用vue技术,开发前端,使用springboot+myBatisplus+mysql 实现后端)
其他
nodejs中module.exports和exports的区别
https://zhuanlan.zhihu.com/p/87729137
图片验证码
https://www.jb51.net/article/138526.htm
Nodejs跨域访问
https://www.cnblogs.com/tengrl/p/10729277.html