•  

                                                                                  vue安装命令

                                                                                  使用cmd输入以下命令

                                                                                  创建一个项目

                                                                                  创建项目

                                                                                  项目名称不要出现大写

                                                                                  npm运行项目

                                                                                  cd到项目里,然后使用

                                                                                  文本插值

                                                                                  v-html

                                                                                  v-html是原始html

                                                                                  属性绑定

                                                                                  v-bind

                                                                                  条件渲染

                                                                                  v-if

                                                                                  v-else-if

                                                                                  v-show

                                                                                  列表渲染

                                                                                  v-for

                                                                                  作用和python的for i in list1一样

                                                                                  以下for xxx in xxx中的in可以替换成of效果一样

                                                                                  执行结果:

                                                                                  在网页源代码中生成三个便利的p标签

                                                                                  image-20240303004622192

                                                                                  v-for解析json数据

                                                                                  运行结果:

                                                                                  image-20240303004402319

                                                                                   

                                                                                  v-for便利对象的所有属性

                                                                                  遍历对象有三个值,value key index 顺序不能改

                                                                                  运行结果:

                                                                                  image-20240303005748147

                                                                                  通过key管理状态

                                                                                  key

                                                                                  注:一般不会把index付给key,key应该是不会变动的,如果往names列表中间加了新数据,那么所有的index就变动了

                                                                                  因此key一般赋值给id类不会变且唯一的值,如下例子:

                                                                                  事件处理(v-on缩写@)

                                                                                  内联事件处理器

                                                                                  事件触发时执行的内联JavaScript语句(与onclick类似)

                                                                                  执行结果:

                                                                                  点击按钮不断累加

                                                                                  image-20240303120947281

                                                                                  方法事件处理器

                                                                                  运行结果:

                                                                                  image-20240303122444633

                                                                                  事件参数

                                                                                  获取event对象

                                                                                  运行结果:

                                                                                  image-20240303123415690

                                                                                  传递参数

                                                                                  运行结果:将hello传递过去并在控制台输出

                                                                                  image-20240303124140263

                                                                                  事件传参

                                                                                  效果:当点击网页上生成的p标签时,点击哪个就会把哪个的名字和event对象在控制台输出

                                                                                  运行结果:

                                                                                  image-20240303125502980

                                                                                  事件修饰符(v-on)

                                                                                  在处理事件时调用 event.preventDefault() 或 event.stopPropagation() 是很常见的。尽管我们可以直接在方法内调用,但如果方法能更专注于数据逻辑而不用去处理 DOM 事件的细节会更好。

                                                                                  为解决这一问题,Vue 为 v-on 提供了事件修饰符。修饰符是用 . 表示的指令后缀,包含以下这些:

                                                                                  阻止默认事件

                                                                                  运行结果:点击软件编程学习Y超链接不跳转

                                                                                  image-20240303131505915

                                                                                  阻止事件冒泡

                                                                                  什么是事件冒泡:如下例子,p在div里,p和div都有个点击函数,如果我点击p,那么会同时触发div的点击函数和p的点击函数

                                                                                  运行结果:

                                                                                  image-20240303132032504

                                                                                  阻止事件冒泡1

                                                                                  或者

                                                                                  阻止事件冒泡2

                                                                                  用事件参数e调用stopPropagation()函数即可

                                                                                  运行结果:

                                                                                  image-20240303132441109

                                                                                  数组变化侦测

                                                                                  操作数组且不生成新数组的7种方式

                                                                                  vue能够侦听响应式数组的变更方法,并在它们被调用时触发相关的更新。这些方法包括:

                                                                                  使用以下方法可以使原数组发生变化

                                                                                  练习例子:

                                                                                  操作数组但生成新数组的3种方式

                                                                                  变更方法,顾名思义,就是会对调用它们的原数组进行变更,相对地,也有一些不可变(immutable)方法,例如filter(),concat()和slice(),这些都不会更改原数组,而总是返回一个新数组,当遇到的是非变更方法时,我们需要将旧的数组替换为新的

                                                                                  使用以下三个方法不会使原数组发生变化,但会生成新数组保存结果

                                                                                  计算属性(computed)

                                                                                  区别:

                                                                                  运行结果:

                                                                                  image-20240303161849642

                                                                                  computed计算属性不能够传递参数,但是可以使用闭包方式实现,下面是一个例子:

                                                                                   

                                                                                  Class绑定

                                                                                  运行结果:

                                                                                  image-20240303164538326

                                                                                  Style绑定

                                                                                  运行结果:

                                                                                  image-20240303165358192

                                                                                  侦听器(watch)

                                                                                  运行结果:

                                                                                  image-20240303170351543

                                                                                  表单输入绑定(v-model)

                                                                                  运行结果:

                                                                                  image-20240303172755960

                                                                                  模板引用(操作DOM this.$refs)

                                                                                  运行结果:

                                                                                  image-20240303174554613

                                                                                  组件组成

                                                                                  组件最大的优势就是可复用性

                                                                                  当使用构建步骤时,我们一般会将Vue组件定义在一个单独的.vue文件中,这被叫做单文件组成(简称SFC)

                                                                                  App.vue

                                                                                  MyComponent.vue

                                                                                   

                                                                                  组件的注册方式

                                                                                  全局注册

                                                                                  在main.js中进行注册

                                                                                  main.js 以下为注册一个Header.vue示例

                                                                                  在App.vue中就不用在script里写import导入了,但是需要在template中写引用

                                                                                   

                                                                                  局部注册

                                                                                  以下为局部注册示例,开发中推荐使用局部注册的方式

                                                                                  组件传递多类型数据props(父传子)

                                                                                  Parent.vue

                                                                                  Child.vue

                                                                                  运行结果:

                                                                                  image-20240303225111334

                                                                                  注意:props传递数据只能从父级传递给子级

                                                                                  组件传递Props效验

                                                                                  ComponentA.vue

                                                                                  ComponentB.vue

                                                                                  运行结果:

                                                                                  image-20240304202813580

                                                                                   

                                                                                  组件事件this.$emit(子传父数据)

                                                                                  ComponentEvent.vue

                                                                                  Child.vue

                                                                                  运行结果:

                                                                                  image-20240304212018144

                                                                                   

                                                                                  组件事件配合v-model使用

                                                                                  效果:使用watch侦听器可以使得父界面和子界面输入同步

                                                                                  SearchComponent.vue

                                                                                  Main.vue

                                                                                  运行结果:

                                                                                  image-20240304214911601

                                                                                   

                                                                                  组件数据传递props(子传父)

                                                                                  本质是父给子传递一个函数,函数里有参数,子给参数赋值返回给父

                                                                                  ComponentA.vue

                                                                                  ComponentB.vue

                                                                                  运行结果:

                                                                                  image-20240305210553588

                                                                                   

                                                                                  插槽Slots

                                                                                  Slot传递div

                                                                                  App.vue

                                                                                  SlotsBase.vue

                                                                                  运行结果:

                                                                                  image-20240305213206449

                                                                                  Slot默认值

                                                                                  如果没有东西传过来那么slot里就会显示默认值

                                                                                  多个Slot命名

                                                                                  使用v-slot进行命名 v-slot:可以写成#号

                                                                                  传递slot

                                                                                  接收slot

                                                                                  使用name = ""对多个slot指定接收的名称

                                                                                  多个插槽传递和返回数据

                                                                                  App.vue

                                                                                  SlotsAttr.vue

                                                                                  运行结果:

                                                                                  image-20240305222156003

                                                                                   

                                                                                  组件生命周期

                                                                                  组件生命周期的应用

                                                                                  组件的切换(:is)

                                                                                  ComponentA.vue

                                                                                  ComponentB.vue

                                                                                  App.vue

                                                                                  通过点击切换组件按钮进行切换

                                                                                  组件保持存活(keep-alive)

                                                                                  ComponentA.vue

                                                                                  ComponentB.vue

                                                                                  App.vue

                                                                                  运行效果:

                                                                                  image-20240306162941001

                                                                                  当点击更新数据的时候,A的老数据会变成新数据,点击切换组件,正常组件会被销毁,但是加了<keep-alive>进行包裹后,点击切换回去同样还是新数据

                                                                                  <keep-alive>用于保持组件存活,当组件被切换时,不会销毁,而是缓存起来,当组件重新被显示时,会重新显示,不会重新创建。

                                                                                  异步组件(defineAsyncComponent)

                                                                                  ComponentA.vue

                                                                                  ComponentB.vue

                                                                                  App.vue

                                                                                  运行效果:

                                                                                  image-20240306164116336

                                                                                   

                                                                                  当进入页面时会进行一次组件和数据的加载但是ComponentB是异步加载,所以ComponentB是不会被加载进来的,当点击切换组件后,ComponentB.vue会在网络请求中进行加载。

                                                                                  依赖注入(祖宗传数据给子孙provide,inject)

                                                                                  注意:provide和inject只能由上往下传(即祖宗给子孙传)

                                                                                  main.js

                                                                                  注意:使用provide创建的globalData为全局数据,在任何地方不管有没有关系都可以读取。

                                                                                  App.vue

                                                                                  Parent.vue

                                                                                  Child.vue

                                                                                  运行结果:

                                                                                  image-20240306171222881

                                                                                  vue引入第三方(swiper轮播图为例)

                                                                                  Swiper开源 免费 强大 自适应的触摸滑动插件

                                                                                  运行结果:

                                                                                  image-20240307163133587

                                                                                   

                                                                                  Axios网络请求

                                                                                  在main.js进行全局引用,日后开发需要很多用到网络请求的地方,因此进行全局引用

                                                                                  前提:已进行跨域

                                                                                  运行结果:

                                                                                  image-20240309132414706

                                                                                  Axios网络请求的封装

                                                                                  1.在src下新建utils文件夹

                                                                                  1.1创建request.js

                                                                                  request.js

                                                                                  2.在src下新建api文件夹

                                                                                  2.1在api文件夹下创建index.js和path.js

                                                                                  path.js

                                                                                  index.js

                                                                                  3.在components文件夹下试用vue进行引用

                                                                                  后端python

                                                                                  app.py

                                                                                  views/peopleAdmin.py

                                                                                   

                                                                                  Axios网络请求跨域解决方案

                                                                                  解决方法:

                                                                                  1.后台解决

                                                                                  2.前台解决

                                                                                  这里只讲前台解决

                                                                                  在vue.config.js中的transpileDependencies: true,后面加入,url需要放入产生跨域的域名即可

                                                                                  在vue文件中写请求 在请求的时候无需再写域名,但是需要加入vue.config.js配置的代理名/api

                                                                                  例如 axios.get('/api/剩余域名')

                                                                                  重启服务器

                                                                                  运行结果:

                                                                                  image-20240307204120347

                                                                                   

                                                                                  vue引入路由配置(router)

                                                                                  1. 在src下创建router文件夹

                                                                                    2.1 router下创建index.js

                                                                                  index.js

                                                                                  1. src下创建views文件夹,用于放页面

                                                                                    3.1 views文件夹内创建HomeView.vue和AboutView.vue

                                                                                  HomeView.vue

                                                                                  AboutView.vue

                                                                                  1. 在main.js引入router下的index.js

                                                                                    main.js

                                                                                  App.vue

                                                                                  运行结果:

                                                                                  点击首页

                                                                                  image-20240307215935167

                                                                                  点击关于

                                                                                  image-20240307220004977

                                                                                   

                                                                                  路由传递参数

                                                                                  router下index.js

                                                                                  views文件夹下

                                                                                  HomeView.vue

                                                                                  AboutView.vue

                                                                                  NewsView.vue

                                                                                  NewsDetailsView.vue

                                                                                  Main.js

                                                                                  App.vue

                                                                                  运行结果:

                                                                                  新闻界面

                                                                                  image-20240307223838498

                                                                                  点击百度新闻

                                                                                  image-20240307223929927

                                                                                  点击网易新闻

                                                                                  image-20240307224015860

                                                                                   

                                                                                  嵌套路由配置

                                                                                  二级路由即是在index.js中加入children属性

                                                                                  router下index.js

                                                                                  在二级导航页面加

                                                                                  AboutView.vue

                                                                                  实现效果:

                                                                                  默认进去显示关于我们

                                                                                  image-20240308131638728

                                                                                  点击关于信息 显示关于信息

                                                                                  image-20240308131712017

                                                                                  Vue状态管理(引入Vuex传输数据)

                                                                                  1.安装vuex

                                                                                  npm install vuex --save

                                                                                  2.在src下创建store文件夹

                                                                                  2.1 store下创建index.js

                                                                                  index.js

                                                                                  3.main.js中引入index.js

                                                                                  main.js

                                                                                  4.使用数据

                                                                                  App.vue 引入数据的第一种方式

                                                                                  HelloWorld.vue 引入数据的第二种方式

                                                                                  效果图:

                                                                                  image-20240308142852518

                                                                                  Vue状态管理的核心Vuex

                                                                                  最常用的核心有:State Getter Mutation Action

                                                                                  state是数据管理,vue状态管理中已讲

                                                                                  1.Getter 对Vuex中的数据进行过滤

                                                                                  2.Mutation数据读取和修改

                                                                                  3.Action功能类似于Mutation,区别是Action进行异步提交数据给Mutation,然后由Mutation进行修改,有异步要求的话Action要配合Mutationji那些修改,如果没有异步要求Mutation自己修改即可。

                                                                                  默认创建项目时选中router和vuex,且已配置好axios跨域

                                                                                  store文件夹下index.js

                                                                                  views文件夹下HomeView.vue 第一种读取数据的方式

                                                                                  注意:vue3中不再使用this.$store.commit("addCounter",15);而是使用下面这种按需导入的方式,取值也是不能用$store.state,用store.state.xxx

                                                                                   

                                                                                  views文件夹下AboutView.vue 第二种读取数据的方式

                                                                                  main.js 引用路由router和vuex

                                                                                  vue.config.js 配置跨域使用axios

                                                                                   

                                                                                  运行效果:

                                                                                  只展示第一种home界面下,因为两种读取数据的方式不同,但是效果是一样的

                                                                                  image-20240308152943807

                                                                                  这是由getters里getCounter函数对数据进行过滤

                                                                                  点击增加按钮:

                                                                                  image-20240308153039239

                                                                                  这是由 mutations下的addCounter函数进行修改的

                                                                                  点击异步增加按钮:

                                                                                  image-20240308153211502

                                                                                  这是由actions下的asyncAddCounter函数异步调用api返回的数值为3,每点击一次就会增加3,同时进行一次异步获取API数据。

                                                                                  以下是一个例子

                                                                                  login.vue

                                                                                  store/index.js

                                                                                  store/state/num.state.js

                                                                                   

                                                                                  vue3新特性

                                                                                   

                                                                                  组合式API

                                                                                  在vue2.x中通过组件data的方法来自定义一些当前组件的数据

                                                                                  在vue3.x中通过ref或者reactive创建响应式对象

                                                                                  ref是简单型的数据使用率高,reactive是复杂性数据使用率高,功能类似

                                                                                  如下是引用数据

                                                                                  methods中定义方法写在setup中

                                                                                  在vue2.x中methods来定义一些当前组件内部方法

                                                                                  在vue3.x中直接在setup方法中定义并return

                                                                                  setup中可以使用props和context

                                                                                  运行结果:

                                                                                  image-20240308161927090

                                                                                   

                                                                                  在setup中使用生命周期

                                                                                  可以通过在生命周期钩子前面加上on来访问组件的生命周期钩子。

                                                                                  下面是如何在setup()内部调用生命周期钩子

                                                                                  Options APIHook inside setup
                                                                                  beforeCreateNot needed*
                                                                                  createdNot needed*
                                                                                  beforeMountonBeforeMount
                                                                                  mountedonMounted
                                                                                  beforeUpdateonBeforeUpdate
                                                                                  updatedonUpdated
                                                                                  beforeUnmountonBeforeUnmount
                                                                                  unmountedonUnmounted

                                                                                   

                                                                                  Provide / Inject

                                                                                  注意:只能是父传子

                                                                                  用法

                                                                                  父组件

                                                                                  子组件

                                                                                  Vue3加载Element-plus

                                                                                  地址:https://element-plus.org/zh-CN/component/overview.html

                                                                                  安装命令

                                                                                  引用element-plus分为两种方式 完整引用和按需导入

                                                                                  完整引入打包时会使项目体积非常大

                                                                                  按需导入需要哪个引用哪个

                                                                                  完整引用

                                                                                  main.js

                                                                                  运行效果:

                                                                                  image-20240308173816201

                                                                                   

                                                                                  按需导入

                                                                                  按照unplugin-vue-components和unplugin-auto-import这两个插件

                                                                                  命令:

                                                                                  修改vue.config.js配置文件 直接覆盖即可

                                                                                  Vue3加载Element-plus的字体图标

                                                                                  地址:https://element-plus.org/zh-CN/component/icon.html

                                                                                  1.安装element-plus

                                                                                  2.安装字体图标

                                                                                  3.在项目根目录下,创建 plugins 文件夹,在文件夹下创建文件文件icons.js

                                                                                  icons.js

                                                                                  4.在main.js中引入icons.js文件

                                                                                  使用图标即可

                                                                                  运行效果:

                                                                                  image-20240308213742222

                                                                                   

                                                                                  toRefs的使用

                                                                                  js获取焦点focus

                                                                                  失去焦点blur

                                                                                  改变change

                                                                                   

                                                                                  点击按钮router跳转

                                                                                   

                                                                                  vue报错:WebSocket connection to

                                                                                  控制台报错

                                                                                  解决方法:在vue.config.js中加入

                                                                                   

                                                                                  防抖功能

                                                                                  安装

                                                                                  导包

                                                                                  使用

                                                                                   

                                                                                  cookie_js

                                                                                  安装

                                                                                  存储

                                                                                  获取

                                                                                  清除

                                                                                  sessionStorage

                                                                                  关闭浏览器自动清除,具有临时性

                                                                                  存储大小:5M

                                                                                  存储于客户端

                                                                                  只能存储字符串类型

                                                                                  存储

                                                                                  获取

                                                                                  删除

                                                                                  清空所有

                                                                                  localStorage

                                                                                  需要手动清除,具有长期性

                                                                                  存储

                                                                                  获取

                                                                                  删除

                                                                                  清除所有

                                                                                   

                                                                                  vue修改标题

                                                                                  在router文件夹下index.js

                                                                                  1.给每一个路由加入meta标签

                                                                                  2.在main.js加入

                                                                                   

                                                                                  按钮设置快捷键

                                                                                  1.在el-form里添加 @keydown.native.enter="onEnterPress"

                                                                                  2.在script里写onEnterPress函数