目标:
目标:
目标:
目标:
① 能够掌握.vue 单文件组件的基本用法
②能够掌握组件通讯的三种方式
③ 掌握组件生命周期的执行顺序和应用场景
目标:
① 能够使用ref 获取页面上 DOM 或组件的引用
② 能够知道 $nextTick 的应用场景并合理地使用
③通过“购物车案例〞巩固前 4 天所有学知识
•动态组件的使用
•插槽的使用(默认插槽、具名插槽、作用域插槽)
•自定义指令
•ESLint 的使用
目标:
①能够使用 keep-alive 实现组件的缓存
② 能够使用插槽提高组件的复用性
⑨ 能够了解常见的 ESLint 语法规则
•路由的基本配置与使用
•路由重定向
•嵌套路由、动态路由
•编程式导航、路由导航守卫
目标:
①能够在项目中安装和配置路由
②能够使用路由实现单页面应用程序的开发
⑨ 能够使用导航守卫控制路由的访问权限
•vant 组件库
•封装 axios
•上拉加载&下拉刷新
。 Vant 主题定制
目标:
① 掌握 Vant 组件库的基本使用
② 能够知道如何封装 axios 请求模块
⑨ 能够知道如何实现上拉加载和下拉刷新功能
小白眼中的前端开发:
实际的前端开发:
前端工程化指的是: 在企业级的前端项目开发中,把前端开发所需的工具、技术、流程、经验等进行规范化、标淮化。
企业中的vue 项目和 React 项目,都是基于工程化的方式进行开发的。
好处:前端开发自成体系,有一套标准的开发方案和流程。
早期的前端工程化解决方案:
• grunt ( https://www.gruntjs.net/ )
• gulp ( https://www.gulpjs.com.cn/)
目前主流的前端工程化解决方案:
• webpack ( https://www.webpackjs.com/ )
• parcel (https://zh.parcelis.ora/ )
前端开发:
模块化(js的模块化,css的模块化,资源的模块化)
组件化(复用现有的UI结构、样式、行为)
规范化(目录结构的划分、编码规范化、接口规范化、文档规范化、Git分支管理)
自动化(自动化构建、自动部署、自动测试)
什么是前端工程化
在企业的前端项目开发中,把前端开发所需的工具、技术、流程、经验等进行规划化、标准化。
好处:前端开发自成体系,有一套标准的开发方案和流程。
前端工程化的解决方案
目前主流的前端工程化解决方案:
webpack (主要)
parcel
2、webpack
webpack的基本使用
概念:webpack是前端项目工程化的具体解决方案。
主要功能:他提供了友好的前端模块化的支持,以及代码压缩混淆、处理浏览器端JavaScript的兼容性,性能优化等强大功能。
新建项目空白目录,并运行npm init -y命令,初始化包管理配置文件package.json
新建src源代码目录
新建src->index.html首页和src->index.js脚本文件
初始化页面基本结构
运行npm install jquery -S命令,安装jQuery
通过ES6模块化的方式导入jQuery,实现列表隔行变色效果
运行结果:出错,语法不兼容
vue提供了v-for列表渲染指令,用来辅助开发者基于一个数组来循环渲染一个列表结构
。
v-for指令需要使用item in items
形式的特殊语法中,其中:
某个方法的返回值是promise实例,则前面可以添加await
await只能用于被async修饰的方法中
使用解构赋值,后面的axios({})的结果里有六个属性(包含data属性),用{data}解构出data属性,{data:res}的含义是,把data属性重命名为res。
安装v-cli
npm install -g @vue/cli
运行v-cli
在准备好的路径下,输入vue create +项目名称
空格键选择
第一项选择后,稍后会询问选择VUE2还是VUE3
第二项babel解决js兼容性
第三项微软的脚本语言
第四项渐进式的web框架
第五项路由
第六项vuex
第七项css预处理器–less
第八个代码编写风格的约束
第九个单元测试
第十个E2E测试
Router
npm run serve
使用管理员权限打开windows powershell
输入 Set-ExecutionPolicy RemoteSigned
改为A
解决了以下问题
把程序运行起来
不要关闭黑框,关闭后程序停掉(如果不小心关闭了,那网页会刷新不出来,相当于关闭了服务器)
使用vs code打开目录
在工程化项目中,vue要做的事很单纯,通过main.js把APP.js渲染到index.html的指定区域中
其中:
el和.$mount()作用相同
输入<
后选择第一个vue提示,可默认生成结构
模板中只能有一个根节点,不然会报错
在中使用less之前,把标签更改为
import
语法导入需要的子组件components
节点注册组件(与data同级)
// 导入文件时是否携带文件的扩展名
"path-autocomplete.extensionOnlmport":true,
// 配置@的路径提示
"path-autocomplete.pathMappings":{
"@":"${folder}/src"
}
components
注册的是私有子组件比如,在组件A的components节点下,这侧了组件F,则组件F只能用在组件A中,不能被用在组件C中
在vue项目中的main.js入口文件中,通过Vue.component()方法,可以注册全局组件。
使用时
标签插件背景: node_modules和package-lock.json 重复配置着两个文件 最快的方法是
npm i -D vue
后面复原了之后又出现了很多问题
ValidationError:Progress Plugin Invalid Options
背景:他是在我运行npm run serve
的时候出来的报错
我也试了很多很多方法 什么再删除node_modules等等方法 我都没有成功 还是你运行一样报错
直到现在 我又重新找方法解决问题 终于!终于!终于! 解决了
补充一点哈:注意看一下你之前的版本是vue2 还是vue3 如果是vue2的话 你执行npm install -g yarn或者npm i -D vue,他可能会自动帮你升级为vue3, 而在vue3和vue2对比当中, main.js的配置是不一样的
运行提示有一个警告 并且提示你在main.js当中 那要留意提下脚手架和Vue版本问题 export 'default' (imported as 'Vue') was not found in 'vue'
遇到上面这个问题的前提是你安装好了yarn 只需要在运行yarn install就可以了 成功!!!
解决方法:
先安装yarn
npm install -g yarn
再执行
yarn install
————————————————
版权声明:本文为CSDN博主「大鼻子cheers」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yms869/article/details/128294880
props
方法一个公共组件,用在不同的组件中时,不同组件希望的初始值不相同时怎么办?
解决办法:使用谁使用公共组件谁提供一个初始值
props是组件的自定义属性,在封装通用组件的时候,合理的使用props可以极大的提高组件的复用性
export default{}
中定义props[]
自定义属性的名字 export default{
// 组件的自定义属性
props:['自定义属性A','自定义属性B','其他自定义属性...']
}
使用:
给自定义属性赋值:
( 添加v-bind
后),:init="6"
含义发生转变:''
包裹时,属于数值型,所以:init="6"
内的"6"
,属于数值型 (这里的init名称不是固定的,是可以更改的)子组件中,程序员只能接收props的值,不能改变
注:不要直接修改prop的值,vue中不支持直接修改prop的值
export default{
// 组件的自定义属性
props:{
init:{
// 用default属性定义属性的默认值
default:0
}
}
}
export default{
// 组件的自定义属性
props:{
init:{
// 用default属性定义属性的默认值
default:0,
// 用type属性定义属性的值类型
//如果传递过来的值不符合此类型,则会在终端报错
type:Number
}
}
}
type的值可以是数值,字符串,对象,数组,布尔值。
required
的值为true
,props必须有父组件提供的数据值,如果父组件没有提供数据,有default
默认值也会报错)export default{
// 组件的自定义属性
props:{
init:{
// 用default属性定义属性的默认值
default:0,
// 用type属性定义属性的值类型
//如果传递过来的值不符合此类型,则会在终端报错
type:Number,
// 必选项
required:ture
}
}
}
因为各个组件最终都会在index.html中,所以在一个组件里设置的H3样式,也会影响其他组件中的H3标签,解决原理:
同一个组件的js都添加同一个属性data-v-001,然后在设置样式时,使用属性选择器h3[data-v-001]
解决方法:
vue约定可以自动添加,在当前.vue文件style标签里添加scoped,vue自动在底层,生成.vue文件时候,为每个标签添加data-v-001属性
在加上scoped之后还是会有缺陷
在父组件中如何修改子组件的颜色
简单类型是把值直接复制,父组件中的message跟子组件中的msg值是彼此无关的。
复杂类型是复制一份对象的引用传过去
想要在父组件中设置一个按钮,用来更改子组件中的数据/方法
在父组件中怎样访问子组件的实例(this)
等组件的DOM更新完成之后,在执行cd回调函数
动态组件是指动态切换组件的显示与隐藏
没有标签表示被激活,加上标签表示被封存
我们有时候会希望组件被缓存时,去做一件事,组件被激活时,做一件事
keep-alive默认会把所有包裹起来的组件,都缓存,那么
这里还有一个对立属性,exclude,表示不包含的意思。
不可以跟include同时使用,二选一。
声明组件时,为组件设置name属性
插槽(Slot)是vue为组件的封装者提供的能力。允许开发者在封装组件时,把不确定的、希望由用户指定的部分定义为插槽
在子组件中声明一个插槽区域
在父组件中的Left组件区域,声明p标签
父组件中没有定义插槽的内容,子组件中可以设置默认内容,当父组件中定义此插槽的内容后,子组件中的默认内容失效。
插槽在定义的时候,可以定义一些数据,给父组件在用这个插槽时候使用
叫obj是可以的,但是为了表明他是通过作用域插槽提供的数据,最好叫做scope来接收。
在提供数据时,可以用msg=“”来写死属性值,也可以用:user=“”来动态绑定属性值
binding可以改名的
console.log(binding)
binding.value的值的是color的值blue
binding值有一个缺点,是只有在第一次绑定到元素上的时候才会触发,如果在触发后更改其中的属性值,页面中的数据发生了更新,bind函数却不会执行了。
全局共享的自定义指令要写在main.js文件中
向vue原型上,挂载axios
优点:在所有.vue组件中都可以使用
第17行,如果router:router,可以简写为router
1.在app.vue中添加三个哈希地址的链接
2.在app.vue中添加占位符
3.在路由模块中(index.js)中,在路由实例对象中,添加router数组,声明三条对应关系。
导入vue-router后使用可以代替a链接
在中to代替了中的href
在to中可以省略#,直接写/home
小问题:在访问默认端口号时,/,没有内容显示
子路由规则不用/开头,父路由规则用/开头
按哪个按钮都会转到电影模块,但是能通过路由,传递不同的mid数据,通过mid数据返回到服务器拿不同的数据,渲染到页面上。
通过路由,实现按不同哈希值的按钮,在同一个模块,显示出对应的信息。
shouThis()打印电影模块的this
this. r o u t e 是路由的参数对象 t h i s . route是路由的参数对象 this. route是路由的参数对象this.router是路由的导航对象
在路由组件中开启props:true
才能在电影组件中获得对应的mid