vue基本知识(111期6天)
2021-04-30 08:45:32 0 举报
AI智能生成
前端框架vue知识点
作者其他创作
大纲/内容
基础入门
vue实例
const vm = new Vue({})
vuejs网课网址
https://cdn.jsdelivr.net/npm/vue/dist/vue.js
https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.js
vue配置项
el:用来指定vue实例管理的容器
data:{}
是一个对象,设置数据项,为视图提供数据源
computed是个对象用来收集计算属性,return
本质是个函数
返回时必须有return
this.计算属性名
计算属性有缓存
数据若变化时,只执行一次,不会执行多次
filters过滤器
作用:进行格式转换
filters是个对象,,里面写函数
filters: { 函数}
使用格式
不带参数{{msg|过滤器的名字}}
带参数{{msg|过滤器的名字(参数)}}
串联{{msg|过滤器的名字1|过滤器的名字2}}
watch侦听器
作用
监听某个数据项是否发生了变化。一旦变化了,它就会自动执行
格式
v-model: "msg"watch:{ msg: function(newVal,oldVal){ console.log(Date.now(), "新值是",newVal,"旧值是",oldVal) }}
案例
关键字筛选,重发请求
与计算属性的区别
共同点
如果它们都侦听(依赖)同一个数据项,当数据项变化时,会去执行函数
它们表现格式都是: { xx1(){}, xx2(){} }
不同点
计算属性:本质是一个函数。如果这个函数中依赖的数据项变化时,这个函数就会重新执行,它必须要有返回结果。
本质是一个函数。当侦听到某个数据变化时,这个函数就会重新执行,但不一定是依赖这个数据直接得到你想要的数。从函数内的代码逻辑来说:侦听器的逻辑一般会更加复杂。侦听器的返回值是没有意义的。
优先级
计算属性 > 侦听器
created()钩子函数
执行机制
当vue实例创建是,它会自动执行
做什么
通过ajax获取数据
例子
created () { // vue实例后执行(回调函数,钩子函数),在某个时机会被调用的函数。 this.get() }, methods: { // 获取列表数据 get() { axios .get("http://localhost:3000/assets") .then(res => { this.list = res.data }) this.name = "" } }
插值表达式
{{}}
相当于console.log('XXX')
能写各种表达式
不能写语句var a = 1;
输出数据项的值
数据渲染指令
v-for指令
功能:批量快速生成列表结构
格式:<元素 v-for="(遍历变量,索引变量) in 可遍历的数据项" :key="唯一的id">
例如 v-for="(item,index) in goods )" :key="index"
可遍历的数据项:数组,对象,数值
v-text和v-html指令
v-text指定标签的内容,和innerText相似,不能解析<b></b>
v-html指定标签的内容,和innerHtml相似,能解析<b></b>
v-show和v-if指令
功能:标签的显示与隐藏
区别
v-show通过display:none来控制隐藏
v-if动态创建元素或者移除元素
v-if,v-else-if,v-else指令
与js中的选择结构是一致的
v-bind指令
作用:动态绑定标签上的属性的值
v-bind:class
:class
绑定三元表达式
:class="num>60>'pass':'fail'"
绑定对象
:class="{blod: true,tc: false}"
绑定数组
:class="['bold','tc']"
v-bind:style
:style
绑定对象形式
:style = {color:'red','font-size':'80px'}
绑定数组形式
:style=[{color:'#ccc'},{border:'10px solid black'}]
事件绑定指令
v-on简写@
作用:监听DOM事件,触发时运行JavaScript代码,修改数据,完成用户交互
格式:
@click="salary+=100"
@click=hAdd()
@click=hAdd(100)
@常与methods搭配在一起
methods: { 函数名}
methods结尾无需return
事件修饰符
格式:
@事件名.修饰符1.修饰符2="回调"
作用:
.stop
阻止冒泡
.prevent
阻止默认行为
@click.stop.prevent
.once
只执行一次
.self
当前元素自身触发处理函数时,才会触发函数
v-model双向绑定指令
作用:获取用户输入数据,并保存在vue数据项中
data中最初数据渲染到表单元素上
在表单元素上的输入数据,会保存到data中的数据项
输入框 :value
@input或者@XXX
在各类表单元素上的作用
输入框input
文本框textarea
复选框checkbox
单选框radio
下拉框select
v-model的修饰符
lazy
触发输入框后,值与数据进行同步
<input v-model.lazy="msg">
number
将用户输入的值转换为数值型
<input v-model.number="age">
trim
自动过滤用户输入的首尾空白字符
<input v-model.trim="msg">
自定义指令directive
全局自定义指令
Vue.directive('focus',{inserted(el){XXX} })
局部自定义指令
directives: {focus: {inserted(el){XXX}} }
补充
v-focus
dom元素提供了focus函数,dom.focus()触发获取焦点事件
通用技能
json-server
全局安装
npm i json-server -g
创建db.json数据
{ "assets":[ {"id":1,"name":"外套","price":99}, {"id":2,"name":裤子","price":34}}, ]}
启动接口服务
json-server db.json
测试
http://localhost:3000/assets
修改测试地址
json-server db.json --port 3001
axios
下载地址
https://unpkg.com/axios/dist/axios.min.js
https://cdn.bootcdn.net/ajax/libs/axios/0.20.0/axios.min.js
文档地址
http://www.axios-js.com/docs/
完整写法
axios({ // 请求方式 get|post|put|patch|delete 大小写不区分 method: 'get', // 路径上传参在url后进行拼接 url: 'http://localhost:3000/brands/1', // ?后键值对传参 params: {}, // 请求体传参 data: {}, // 请求头传参 headers: {}}).then(res=>{ console.log('成功')}).catch(err=>{ console.log('失败')})
简写写法
// get类型的 参数要放在写params中axios.get(url,params: {}).then(res=>{console.log('成功')}).catch(err=>{ console.log('失败')})// post类型 直接写参数axios.post(url,{}).then(res=>{console.log('成功')}).catch(err=>{ console.log('失败')})
组件component
理解组件
组件是自定义标签
本质
是一个vue实例,写法和vue实例不同new Vue({//配置对象})
Vue.component("组件名",{//配置对象})
定义
定义组件名:大驼峰命名法,使用组件名采用烤串是命名
使用格式
<组件名1></组件名1>
<my-com></my-com>
全局组件
所有的vue实例都可以使用
Vue.component("组件名",{ template:``, data(){ return {}; }})
局部组件
只能当前的vue实例中使用
data:{}components: { 组件名: { data(){return { } }, template:``, props:[], }}
组件配置对象说明
- 不包含 el 选项,el是指定vue实例(或者称为根组件)管理的视图容器。- 通过 template选项,指定html结构容器,每个组件模板有且只有一个根元素。- data数据项必须是一个函数,通过它的返回值来设置数据。
父子之间通信
父传子
原则:你情我愿
父组件愿意传入值,子组件愿意接受值
数据
父传给子
自定义属性名
子要接收
props
如果父组件中修改了数据,则子组件中接收到的也会同步修改
插槽slot
定义格式
在子组件的模板中,通过slot预留出来的区域,充当占位符功能
template: ` <div> 其它元素.... <slot>默认插槽</slot> 其它元素.... <slot name="插槽1">具名插槽</slot> 其它元素... <slot name="插槽2"></slot> </div>`
<my-com1 tit="abc"> <!-- template就是逻辑上的一个容器, 不会被渲染成真实的dom --> <template slot="插槽名字"> <ul class="a2"> <li>这里是从父组件传入的结构</li> </ul> <p>xxxxx</p> </template> </my-com1>
父子组件传结构
子传父
原理
自定义时间+$emit
步骤
父组件
<my-com @自定义事件名1="定义在父组件中的回调"></my-com>
子组件
this.$emit(自定义事件名1,参数:数组,对象,字符串等)或者$emit(自定义事件名1,参数:数组,对象,字符串等)
建议事件名采用烤串格式
注意:$emit里面的事件名一定要采用小写形式,否则报错
this.$emit("a-b-c")
子传父原理图
分支主题
路由router
原理
#
锚点链接(非路由称锚点): #
路由中称哈希: hash值
特点
当地址栏中的hash变化时,会触发一个hashchange的事件;
function hashChange() { // location.hash: 自动获取地址栏中的hash值 if(location.hash === '#/index') { document.getElementById('content').innerHTML = "我的主页" } else if(location.hash === '#/myfrend') { document.getElementById('content').innerHTML = "朋友" } else if(location.hash === '#/music') { document.getElementById('content').innerHTML = "音乐" } }
hashchange 事件用来监听hash值的变化
hash的改变也会记录到浏览历史中,通过回退和前进可以切换业务场景
location.hash: 自动获取地址栏中的hash值
它并不会导致浏览器重发请求
vue-router网课网址
https://cdn.bootcss.com/vue-router/3.1.3/vue-router.min.js
作用
不刷新页面的情况下,根据路由地址不同,显示不同的内容
SPA
单页面应用程序,简称SPA(single page application)一个系统上的所有功能在一个页面上实现。
优点:整体不刷新页面,用户体验更好。
缺点:首次加载会比较慢一点。
使用vue-router
1.导入插件vue-router.js
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.js"></script># 先下载到本地,再引用<script src="./vue-router.min.js"></script># 直接引用<script src="https://cdn.bootcss.com/vue-router/3.1.3/vue-router.min.js"></script>
2.创建VueRouter实例
初始化vue-router插件
基本格式
const router = new VueRouter({ routes: [ {path:"路径1",component:要展示的组件1}, {path:"路径2",component:要展示的组件2}, ..... ]})
const abc = new VueRouter({ routes: [ { path: '/', component: { template: `<div>主页</div>` } }, ]})
3.挂载到vue实例
new Vue({ el: '#app', router: router,})
4.设置路由出口
在vue的模板,添加一个router-view组件,用它来指定当前路由对应组件渲染的位置。
<!-- 渲染路由对应的组件 router-view承载路由对应的组件的--><router-view></router-view>
5.路由导航
通过router-link来进行路由跳转。
<!-- 写路由链接 不会使用a标签 使用router-link组件 --><nav> <!-- 组件默认解析的是a标签 to属性跳转的地址,不需要带上# --> <router-link to="/">主页</router-link> <router-link to="/news">新闻</router-link> <router-link to="/sports">运动</router-link></nav>
<router-link to="地址">
router-link组件会被vue解析成a标签,但不能直接通过a标签来跳转。
如果当前路由被激活会添加特殊的类名:
router-link-exact-active router-link-active
动态路由
同一个组件,根据传入参数不同,显示不同的内容。
// 例如:大事件项目前中的新闻详情页。 // localhost:3000/index.html#/detail/100 ----> 显示编号为100的新闻 // localhost:3000/index.html#/detail/101 ----> 显示编号为101的新闻
1.定义路由规则
path:'/detail/:形参名'
2.跳转 `to:/detail/实参`
3. 在组件中获取当前的参数值
// this.$route.params.形参 // - $route 引入了vueRouter插件之后, vue组件内部通过 $route 就可以直接来访问当前的组件对象 // - $route这个对象有很多属性,params用来保存当前传入动态路由的参数值
总结
数据:模板 {{$route.params.id}} 组件 this.$route.params.id
代码: 定义路由时,注意::id。 {path:'/detail/:id', component: detail}
跳转及传参
声明式导航
<router-link to="地址"></router-link>
传参有两种方式:
查询传参 /aricle?id=1001
路径传参 /article/1001
获取传参数的方式: (根据传参不同,获取参数也不同
查询传参: this.$route.query.id
路径传参:this.$route.params.id
普通字符串,不带参数。
<router-link to="/list"></router-link>
普通字符串,进行带参数的跳转。
<!-- 路径传参 路由规则{path:'/article/:id'}--><router-link to="/article/10001"></router-link><!-- 查询传参 路由规则{path:'/article'}--><router-link to="/article?id=10001"></router-link>
编程式导航
this.$router.push('地址')
路由传参
this.$router.push('/detail/100')
接收:this.$route.params.id
查询传参
this.$router.push('/detail?a=100')
接收:this.$route.query.a
路由重定向redirect
路由规则对象中 提供了一个选项:redirect 配置重定向的地址即可。
const router = new VueRouter({ // routes 指定路由规则数组 routes:[ // 匹配 / 路径,重定向 到 '/home' 即可 { path: '/', redirect: '/home' }, // 首页路由规则 { path: '/home', component: { template: '<div>首页页面内容</div>' } } ] })
生命周期函数
beforeCreate
创建阶段的第一个生命周期函数
备注
created
(重要)创建阶段的第二个生命周期函数
备注
beforeMount
创建阶段的第三个生命周期函数
备注
mounted
创建阶段的第四个生命周期函数,代表页面已经完成了首次渲染
备注
beforeUpdate
运行阶段的生命周期函数
备注
updated
运行阶段的生命周期函数
备注
beforeDestroy
备注
destroyed
备注
webpack一款打包工具
作用
将源代码转为目标代码
在前端三大框架中都集成webpack
在传统项目中引入并使用webpack
1.初始化项目
npm init -y
2.在项目中安装webpack(采用本地安装)
npm i XXXX -g # 全局安装npm i xxxx # 本地安装 不加-g
3.安装命令
$ npm i webpack webpack-cli -D------+ webpack-cli@4.1.0+ webpack@5.1.3
4.检查是否安装成功
# 方式一:node_modules\.bin\webpack -v# 方式二:npx webpack -v
注意
- 由于webpack并不是全局安装的,所以并不能直接使用webpack -v来做检验。- npx是npm5.2之后提供的新功能。它在运行时会在node_modules/.bin中去检查命令是否存在。
webpack看来,一切皆模块。它自己只能处理.js,其它的要依赖于loader来处理
devtool-source map
此选项控制是否生成,以及如何生成 source map
使用
mode: 'production',
webpack4版本用的是生产模式
https://v4.webpack.docschina.org/configuration/devtool/
mode: 'development',
webpack5版本用的是开发模式
https://webpack.docschina.org/configuration/devtool/
devtool: 'cheap-module-source-map',
在开发阶段可以设置:devtool:'cheap-module-eval-source-map'
webpack4版本开发阶段用这个,在webpack5版本无这个代码
配置
默认配置文件名
webpack.config.js
基本配置
mode
设置打包方式
两种
开产:development
生产:production
入口
默认入口文件的地址
src/index.js
修改
entry: 文件的地址
出口
默认出口文件的地址
dist/main.js
修改
配置
devtool
作用
是以哪种方式生成sourcemap文件
soutce map文件:
分界线
在使用webpack之前: 传统开发
没有源文件,目标文件的概念
无法采用模块化开发
一个.html中引入多个js文件, 多个css文件
直接修改代码,立即查看结果
在使用webpack之后,工程化开发
修改源文件, 通过 webpack打包 , 得到目标文件
所有的资源全是在入口文件中引入的
css
指定配置文件
格式
npx webpack --config webpack配置文件
注意
配置文件是可以自行指定的,不一定非要要叫webpack.config.js。
简化打包命令
可以在package.json中添加script命令来快速启动webpack
"scripts": { "自定义命令名": "要具体执行的代码", }
例子
Windows Powershell中的命令
npm i
安装所有package.json的插件
npx webpack
零配置打包
npm run build相当于npx webpack --config webpack.config.js
npm run dev
npm run dev相当于npx webpack --config webpack.build.js
npx webpack-dev-server
loader
css
css-loader
安装loader包:npm i css-loader -D
配置webpack.config.js中的module
注意备注中的use: 从右往左来执行的
style-loader
安装loader包:npm i style-loader -D
配置webpack.config.js中的module
less
安装loader包:npm i less-loader less -D
自动添加css样式前缀
postcss autoprofixer
安装loader包:npm i postcss postcss-loader autoprefixer -D
单独设置 postcss.config.js
配置webpack.config.js中的module
file-loader
file-loader-处理字体文件
安装loader包:npm i file-loader -D
配置webpack.config.js中的module
url-loader
url-loader处理图片
安装loader包:npm i url-loader -D
配置webpack.config.js中的module
babel-loader
babel-loader处理js降级问题
安装loader包:npm i babel-loader @babel/core @babel/preset-env -D
配置webpack.config.js中的module
vue-loader
vue-loader处理单文件组件
安装
开发依赖
详见
生产依赖
npm i vue
配置webpack.config.js
打包
npx webpack
相当于npx webpack --config webpack.config.js
plugin
学习方法
用到的时候,去官网
mini-css-extract-plugin
功能
把css代码提取到一个独立的文件中
下载npm install mini-css-extract-plugin -D
配置
运行webpack打包,检查效果
npx webpack --config webpack.config.js
html-webpack-plugin
功能
把我们自已写的.html文件复制到指定打包出口目录下,并自动引入相关的资源代码
下载npm i html-webpack-plugin -D
注意:需要使用这个版本
npm i html-weboack-plugin@4.5.0 -D
配置
打包测试
npx webpack --config webpack.config.js
clean-webpack-plugin
功能
在生成打包文件之前,把出口目录清空掉。
下载npm i clean-webpack-plugin -D
配置
打包测试
npx webpack --config webpack.config.js
代码压缩优化
打包方式设置成生产模式
mode:'production'
对css进行压缩
下载npm i -D optimize-css-assets-webpack-plugin
配置
打包测试
npx webpack --config webpack.config.js
webpack实时打包
webpack-dev-server
目标
实现实时打包预览效果。当我们修改了代码时,立即运行打包命令,并显示效果。
安装
npm i webpack-dev-server -D
配置
webpack.config.js中
package.json中
打包测试
npm run dev
注意
"webpack": "^4.44.2","webpack-cli": "^3.3.12",
等于npx webpack-dev-server
它要怎么学?
照着讲义自己复制粘贴配置
不需要你去记配置名,参数......
ES6模块化
参考网址
ES6模块化--与vue无关
在浏览器的环境下学习ES6的模块化
模块化
让一个.js文件(A.js)中可以引用另一个.js文件(B.js)中的代码
模块化的规范
commonjs规范
nodejs中是commonjs规范
es6规范
ECMA规范
nodejs规范CommonJS
导出
module.exports = '导出的内容'
或者exports.xxx = '导出的内容'
导入
const path = require('path')
ES5模块化
默认导入和导出
导出
export default 导出内容
导入
import 变量名 from 'js模块路径'
按需导入和导出
导出
export const 成员变量名1 = '导出内容1'
export const 成员变量名2 = '导出内容2'
导入
import {成员变量名1} from 'js模块路径'
整体导入
// 按需导入(全部成员导入)import * as all from './module-b'console.log(all) // 收集了所有成员的变量(对象)
导入导出重命名
export {xxx as 新名字}import {xxx as 新名字}
Vue单文件组件
.vue后缀的文件表示一个组件
建议使用小驼峰命名法
app.vue;header.vue;myheader.vue
它需要vue-loader和webpack支持
结构
template
视图
script
组件定义中除template之后的其他配置项
有一个export default{}
style
样式
使用方式
定义
直接写一个.vue文件,vscode中用vetur插件可以帮我们快速录入
引用
导入组件
import 大驼峰命名 from './XXXX'
注册组件
export default { components:{组件的大驼峰名}}
使用组件
<template> <烤串-烤串 格式/></template>
webpack+vue-loader搭建开发vue的环境
环境搭建
npm init --yes
安装package.json包
npm i 各种包
开发依赖
本案例
生产依赖
本案例
配置webpack.config.js
本案例
引入bootstrap,改造app.vue
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
通过入口文件main.js去导入各个模块
例如
开发调试时,要用webpack-dev-server
路由设置
下载路由插件
npm i vue-router
路由配置规则
创建对应的组件,导入vue-router
webpack-dev-server这个写,例如
webpack-dev-server不应该这个写,例如
以vue插件方式,去引用vueRouter到vue实例中,注册插件
Vue.use(VueRouter)
创建vueRouter实例
例如
挂载到vue实例
例如
设置路由出口
例如
路由导航
例如
注意
动态路由跳转及传递
当前选项中的路径对应的router-link会多出一个特殊的类router-link-active
例如
json-server模拟接口
json-server db.json
ajax
npm i axios
在发出axios之前,要先在组件中导入axios
import axios from 'axios'
四种常见ajax操作(增删改查)
查询
axios({method: 'GET', url: 'xxx'})
添加
axios({method: 'POST', url: 'xxx', data:})
删除
axios({method: 'DELETE', url: 'xxx'})
编辑
axios({method: 'PUT', url: 'xxx', data:})
备注
v-for
:key
作用:在循环中要通过key区别一个tr与另一个tr,key一定要写,不然,vue-loader报错

收藏
0 条评论
下一页