0 安装脚手架
npm install -g @vue/cli
使用命令创建项目
vue create xxxx
运行项目
npm run serve(Vue CLI 3+ 创建的标准化项目,基于Vue CLI内置的vue-cli-service工具链启动,集成更高效的编译和热更新功能)
1.创建项目
在默认配置都有的情况下:
vue init webpack 项目名称
cd 项目
npm install
npm run lint – –fix
npm run dev(Vue CLI 2.x及早期项目或自定义配置项目,调用webpack-dev-server启动本地开发服务器,配置路径由webpack.dev.conf.js定义)
feature/ELIM-16’ into ‘hotfix/1.3.1’ in 2020-09-07 16:34:22
遇到问题
报错“ vue-cli · connect ECONNREFUSED ”
cnpm -v
查看到prefix=/usr/local,
于是 npm config set prefix=/usr/local 设置下
最后vue list 查看到
vue2内容
绑定:vm.$mount()
1 | @click="xxx(??,$event)" |
数据属性data
1 | --script |
方法属性methods
1 | --script |
v-指令
v-bind
,单项绑定:用法:v-bind:x="value"
,简写:x="value"
v-model
,双向绑定,用于表单数据:用法:v-model:x="value"
,简写v-model="value"
v-on:click
,点击@click
keyup
,keydown
,键盘起落
v-text
会替换文字框中的文字
不会解析html<div v-text=">
v-html
可以解析html<div v-html="">
v-cloak
<h2 v-cloak>
vue实例会接管这个标签,直到页面加载后删除该标签,和css配合
1 | //[]意思是选中所有带cloak的标签,标签里面的信息消失 |
v-once
初次动态渲染后,就视为静态资源,后续在改,不会变<h2 v-once>
v-pre
这个标签,vue会无法解析
修饰符
1 | @click.prevent 阻止事件 |
按键别名
1 | keyup.enter, 回车后按键弹起时触发, (keyup.13,很多浏览器已经移除该方式) |
数据代理
_data
底层使用的是数据代理方式,通过vm对象来代理data对象中的属性操作
通过Object.defineProperty()
方法,将data对象中所有属性添加到vm中,都指定getter/setter
1 | Object.defineProperty(obj, 'xxx', { |
数据劫持
数据可以反馈到页面上
计算属性computed
有缓存,需要即时读取,methods是没有缓存的,效率不好
计算属性需要返回值,所以要return
1 | --html |
计算属性简写
1 | //只读不改可以简写 |
监视属性watch
可以进行异步操作vm.$watch('isxxx',{})
//这个作用域在script,不能写在vue对象中vue
监测数据内部值,但watch
默认不监测数据内部的值,可以使用deep
参数
1 | watch:{ |
监视属性简写
vm.$watch('isxxx', function(){})
1 | watch:{ |
变更样式
1 | --html |
条件渲染
v-show
显示隐藏,底层是display
v-if
,v-else-if
,v-else
1 | <h2 v-show="true"></h2> |
template
模板与v-if
配合使用,最后解析时会自动去掉
1 | <template v-if="true"> |
列表渲染
遍历渲染,key
是标识
数组遍历
1 | <ul> |
对象遍历
1 | <ul> |
列表过滤
1 | watch:{ |
列表排序
1 | computer:{ |
vue监测数据原理
对象
1 | let data={x:'ddd'} |
vue.set()
可以后添加vue.set(vm._data.xxx,属性,value)
vm.$set(vm._data.xxx,属性,value)
数组
通过一下方法进行修改数据
1 | push |
收集表单
1 | <form @submit="xxx"></form> |
过滤器(vue3
移除)
已经从vue3
中移除了, 官方建议用compter
或methods
来实现相关功能
只能用在插值语法和v-bind
1 | //按顺序执行 |
自定义指令-函数式
指令中this指向的不是vue,而是window,因为直接操作页面元素了
两个时机调用:
1.指令和元素成功绑定时,就会响应
2.指令所在的模板重新解析时会调用自定义指令
全局:vue.directive('',{functions})
1 | <span v-xxx="n"/> |
自定义指令-对象式
1 | <input type="text" v-fbind:value="n"> |
生命周期
生命周期回调函数
vue的一生
将要创建=>调用beforeCreate函数
创建完毕=>调用created函数
挂载完毕=>调用mounted函数 ======>重要的钩子
将要更新=>调用beforeUpdate函数
更新完毕=>调用updated函数
将要销毁=>调用beforeDestroy函数 =====>重要的钩子
销毁完毕=>调用destroyed函数
1 | //vue完成模板解析并把初始的真实dom放入页面后(完成挂载)调用mounted |
生命周期-挂载流程
1 | //初始化生命周期\事件,但数据代理未开始 |
生命周期-更新流程
在mounted
和beforeDestroy
之间
1 | //此时数据是新的,但页面是旧的,即页面尚未和数据保持同步 |
生命周期-销毁流程
当vm.$destroy() is called
时
1 | //vue中所有的data,methods,指令等都处于可用状态,马上要执行销毁过程,一般进行:关闭定时器,气消订阅消息 |
组件化编程
组件–实现应用中局部功能代码和资源的集合
组件化编程-非单文件组件
1.创建组件
2.注册组件
3.编写组件标签
全局:Vue.components('组件名', {})
1 | //编写组件标签 |
组件嵌套
1 | //组件2要写在组件1中 |
Vuecomponent
组件本质上是一个Vuecomponent的构造函数,是vue.extend生成的。
每次调用一个vue.extend都会生成一个全新的Vuecomponent函数
Vuecomponent实例是可以访问到Vue实例上的属性方法,原因是vuecomponent原型属性指向了vue的原型属性
组件化编程-单文件组件
1 | <!-- xxx.vue --> |
写完组件后,开始引入组件
1 | <!--App.vue--> |
写完App.vue
后,需要引入到main.js
中
1 | import App from './App.vue' |
index.html
1 |
|
vue脚手架(vue cli)
vue command line interface 命令行工具
vue开发的标准工具
目录结构
babel.config.js ES6->ES5
package.json 依赖
package-lock.json 包版本控制
npm run后,第一时间加载main.js文件
1 | import Vue from "vue";//这个vue指向了哪个文件?看node_modules/vue/package.json文件中的module属性 |
index.html
1 |
|
webpack相关配置
vue隐藏了所有webpack相关的配置,如果想看,需要执行如下命令
vue inspect > output.js
如果需要给这些相关的配置,需要建文件vue.config.js
1 | // vue.config.js |
ref属性
这个属性是被用来给元素或子组件注册引用信息(id的替代)
应用在html标签中是dom元素,应用在组件中,则是组件的实例对象
1 | <template> |
props属性
props可以从主组件传入数据
主组件
1 | <template> |
子组件
1 | <template> |