vue基础学习笔记
vue学习
语法字典
- vue.config.js相关配置
-
- module.export对象
-
- devServer修改服务器相关配置
-
- open 控制浏览器是否默认打开 true为打开
- port 修改浏览器端口
- lintOnsave是否打开eslint代码检查功能 true/false
- vue基础语法
-
- 插值表达式(声明式渲染/文本插值)
-
- html语法
-
- {{表达式}}
- 表达式可以为变量,对象,表达式(不可以为if语句等但可以为三元表达式)
- js语法
-
- MVVM设计模式
-
- v-bind指令给标签属性设置vue变量值
-
- 语法
-
- v-bind:属性="vue变量"
- 简写格式
-
- :属性="vue变量"
- vue变量为布尔值时控制属性的有无
- v-on指令绑定事件
-
- v-on:事件名="执行函数"
- v-on:事件名="methods中函数名"
- v-on:事件名="methods中函数名(参数)"
- 简写格式
-
- $event实参代表事件对象(e)
-
- vue事件修饰符
-
- vue按键修饰符
-
- v-model 表单标签属性value和vue数据变量捆绑
-
- 语法
-
- 针对不同表单
-
- 下拉菜单(select)
-
- 复选框(checkbox)
-
- v-model绑定在各复选框上
- 如果v-model对应的vue数据变量是非数组,则绑定checked值(true/false),是数组绑定value值
- 单选框(radio)
-
- 文本域(textarea)
-
- 修饰符
-
- .number ——以parseFloat转成数字类型
- .trim——去除首尾空白字符
- .lazy——在change时触发而非inup时(失去焦点)
- v-text/v-html
-
- 语法
-
- v-text/v-html:"vue变量"
- 会覆盖插值表达式
- v-show/v-if
-
- 语法
-
- 原理
-
- v-show采用display:none
- v-if采用DOM树直接移除
- v-else,当v-if条件不满足的时候
- v-for列表渲染
-
- 语法
-
- v-for="(值变量,索引变量)in 循环目标"
- v-for="值变量 in 循环目标"
- v-for="(值变量,key)in 循环目标"
- 循环目标可以是数组/对象/数字
- this.$set更新对象或数组
-
- 语法
-
- this.$set(目标,key,value)
- 目标可以是对象也可以是数组
- :key 页面渲染
-
- 动态class属性
-
- 动态style属性
-
- filters过滤器
-
- 使用环境
-
- 使用语法
-
- 值|过滤器名字
- 同时使用多个过滤器,或给过滤器传参
-
- 定义语法
-
- 只能定义一个——(全局写法)Vue.filter("过滤器名",(值)=>{return "返回处理后的值"})
- 同时定义多个——(局部写法)filters{"过滤器名",(值)=>{return "返回处理后的值"}}
- computed计算属性(用于动态赋值)
-
- 语法
-
- computed:{"计算属性名"(){return "值"}}
- 完整语法
-
- computed{"计算属性名":{set(){ },get(){return 值}}}
- 优势
-
- 依赖项不变的情况下,会将结果进行缓存,当依赖项改变的时候,会将新的结果进行缓存
- watch侦听器
-
- 用途
-
- 语法
-
- watch:{被侦听的属性名 (newVal,oldVal){ } }
- 完整写法
-
- 组件component
-
- 全局创建
-
- 语法
-
- import 自定义命名 from '文件地址'
- Vue.component("准备应用到文件中的名字",上一步的自定义命名)
![]()
- 使用方法
-
- 在vue文件中将准备应用到文件中的名字作为元素标签使用
- 局部创建
-
- 语法
-
- import 自定义命名 from '文件地址'
- components{ 准备应用到文件中的名字:上一步的自定义命名 }
![]()
- 使用方法
-
- 在vue文件中将准备应用到文件中的名字作为元素标签使用
- scoped属性
-
- style标签上加 属性,保证style的样式只作用于当前页面
- 组建通信
-
- 子组件-props 准备父组件的变量属性
-
- 示例写法
-
- props:['suibian','suiji']
- props:{ background:String,color:{ type:String , default:"#fff",required:true , validator(value){ } //自定义校验规则 }} 控制传入的值的数据类型,默认值和是否必选项
- props是只读属性,对其修改不会改变父亲的值
- 自定义事件
-
- 让子组件可以修改父组件中的数据
- 语法
-
- 在父组件中的子组件上绑定自定义事件
- @自定义事件名="父组件中的函数方法名"
- 在子组件中进行触发
-
- EventBus跨组件通信
-
![]()
- 新建空白js文件,import方法导入vue,export default new Vue()导出实例化的vue文件
- 接收方用eventBus.$on()
- 发送方用eventBus.$emit()
- 生命周期
-
- 从创建到销毁
-
- 钩子函数
-
- 四个阶段八个方法
-
![]()
- 新增两个
-
- activated——组建激活时触发
- deactivated———组建失去激活状态时触发
- this.$refs获取原声DOM
-
- 语法
-
- 标签上挂载ref属性
- this.$refs.属性名获取
- this.$nextTick(()=>{ })DOM更新后触发参数中的函数体
- 创建全局Vue属性
-
- Vue.prototype.$axios = axios
- 动态dynamic组建
-
![]()
- 在data中声明变量a接受组建名
- 在templete中用控制要显示哪个组建结构
- 会创建和销毁隐藏的组建,和v-if一样
- 组建缓存
-
- slot标签,组建插槽(实现内容分发)
-
- 在组建内用slot标签进行占位,占位标签中间的内容为默认内容
-
- 在父组建调用组建标签的位置,插入标签内容
- 具名插槽 (给slot添加name属性)
-
- 父组件在使用时,需要给替换的便签跟标签添加v-slot:name值 属性
-
- 作用域插槽
-
- 目的
-
- 语法
-
![]()
- 子组建使用slot标签,随意声明一个属性名绑定子组建的data数据(:suiji="Vue变量")
- 父组建在替换的根标签上使用v-slot="自定义变量名" 在根标签中使用{{自定义变量名.Vue变量}}
-
- 自定义指令
-
- 语法
-
- 全局注册
-
![]()
- inserted方法只有在初始化的时候执行一次
- update方法数据更新的时候执行
- 局部注册
-
- 使用方法
-
- 路由
-
- vue-router官方推荐第三方模块包
- 语法
-
- main.js进行全局注册
-
- import vuerouter from 'vue-router'
- Vue.use(vuerouter)
- const routes = [{ path:'/find'},component:find]
-
- const router = new vuerouter({ routes:routes ,mode:"history"})
- new Vue ({ router ,...........})
- 页面组件进行使用
-
-
- 根据地址不同去读取main.js全局注册的path地址,有匹配的返回相应的组件进行替换
- 发现音乐
- 进行路由传值
-
- 方法一
-
- 发现音乐
- 对应的组件内部,可以直接使用$route.query.参数名
- 方法二
-
- main.js中进行相关配置
-
- const routes = [{ path:'/find/:参数名/:参数名'},component:find]
- 发现音乐
- 对应的组件内部,可以直接使用$route.params.参数名
- 路由重定向
-
- 在main.js定义规则的时候添加{path:'/',redirect:"/find"}
-
- 路由404
-
- 先准备404的页面组件notfond
- 在规则最后面添加 path:* ,compontent:notfond
- *是任意字符
- 路由模式设置
-
- 在main.js中 router 实例化对象中添加 mode:"history"
- 编程式导航
-
![]()
- 利用path更改或name更改,path,name都是main.js规则中自己的配置项
- this.$router.push({ path:zhi })
- 传参
-
- 语法
-
![]()
- 如果切换使用的是path方法则不能用params进行传参,name两种方法都可以
- 接收参数同样使用与之对应的route.query.参数名/route.params.参数名
- 路由嵌套
-
![]()
- 在main.js的规则中进行配置
- 路由守卫
-
![]()
- 在main.js中定义router实例化对象.beforeEach((to,from,next)=>{})
-
- next()正常跳转
- next(false)原地停留
- next("强制修改到另一个路由路径上")
- 单页面的弊端
-
- 第一次加载要请求所有的资源
- 不利于seo搜索引擎排名
- vant移动端组件库
- vant移动端适配
-
- js方法复习
-
- 数组翻转(.reverse())
- 字符串转数组(.split())
- 数组转字符串(.join())
- 数组截取(slice())
- 数组尾部添加(push())
- 数组尾部删除(pop())
- 数组头部添加(unshift())
- 数组头部删除(shift())
- 数组删除某一个或某几个值(splice())
- 数组值排序(sort())
- 数组返回匹配的值的索引(findIndex())
- 数组求和方法(reduce())
- 保留两位小数(toFixed())
- 数组筛选符合条件的数据,返回新数组(filter())
- 数组中的每个元素是否都符合某个条件(every())
- 本地储存JSON字符串问题
-
- JSON.parse 转化为对象或数组等格式
- JSON.stringify转化为JSON字符串
- 数组累加方法(reduce())
- DOM获取焦点方法focus()
- input自动获取焦点属性 autofocus
- 失去焦点事件 blur
- 查找数组中是否有符合条件的值(indexOf())
- input表单输入内容改变实时监控(input())
- input表单输入内容改变失去焦点监控(change())
- axios数据库发生ajax交换
-
![]()
- axios.defaults.baseURL配置全局根路径
Vue脚手架
- @vue/cli全局模块包
-
- yarn global add @vue/cli全局安装脚手架
- vue -V查看版本
- 脚手架创建项目
-
- vue create vuecli-demo(文件夹名称) 创建项目
- 选择模版和包管理
- 切换至项目文件夹
- 运行yarn serve
- 目录和代码分析
-
- 项目架构了解
-
![]()
- 入口main.js解读
-
- @vue/cli自定义配置
-
- 创建vue.config.js进行配置
-
- devServer
-
- open true自动打开浏览器
- port 修改浏览器端口
- eslint代码检查
-
- 实例
-
- 处理方法
-
- 方法1:手动解决错误
- 方法2:暂时关闭eslint检查
-
- vue.config.js中添加lintOnsave:false 关闭eslint检查
- 单vue文件 (独立作用域不再担心变量重名问题)
-
- 简介
-
- template标签中只能有一个根标签
-
- style 中的 scoped属性
-