1.框架和库的区别
框架:是一套完整的解决方案; 侵入性大 (更换框架,需要重新架构整个项目)
库(插件):提供某一个小功能;侵入性小 (某个库无法完成,很容易切换另一个库)
2. 事件修饰符
.stop阻止冒泡
.prevent 阻止默认事件
.captaure添加时间侦听器使用事件捕获模式
.self只当事件在该元素本身 触发回调
.once事件只触发一次
顺序:捕获--目标--冒泡
3.vue指令 必须v-开头
插值表达式
v-model
绑定数据 只能用于表单元素(输出元素上)
双向绑定:数据不仅从data流向页面 还能从页面流向data
v-model:value 简写为 v-model (因为v-model默认收集value值)
v-bind
单向绑定:只能从data流向 页面
简写为 ‘:’
v-for循环对象
循环data中的内容 id:1这类 key就是id val是1
使用key的注意事项:
v-for循环的时候,key属性只能使用number获取string
key在使用的时候,必须使用v-bind属性绑定的形式,指定key的值
在组件中使用v-for循环的时候,或者在一些特殊情况中,如果v-for有问题,必须使用v-for的同时,指定唯一的字符串/数字 类型:key值
in后面我们放过 普通数组,对象数组,对象,还可以放数字
注意:如果使用v-for迭代数字的话,前面count值从1开始历遍
v-if v-show
v-if特点:每次都会重新删除或创建元素
有较高的切换性能消耗(元素涉及到频繁的切换,最好不要使用v-if)
v-show特点:每次不会重新进行DOM的删除和创建操作,只是切换了元素的 display:none样式
有较高的初始渲染消耗(如果元素可能永远不会被显示出来被用户看到,则推荐v-if)
自定义指令
定义不用加v-
使用需要加v-
eval(string) 不建议使用!
函数会将传入的字符串当做 JavaScript 代码进行执行。
eval() 的参数是一个字符串。如果字符串表示的是表达式,eval() 会对表达式进行求值。如果参数表示一个或多个 JavaScript 语句,那么eval() 就会执行这些语句。不需要用 eval() 来执行一个算术表达式:因为 JavaScript 可以自动为算术表达式求值
如果 eval() 的参数不是字符串, eval() 会将参数原封不动地返回。
可以使用一些通用的方法来绕过这个限制,例如使用 toString()
缺点
eval() 是一个危险的函数, 它使用与调用者相同的权限执行代码。
eval() 通常比其他替代方法更慢,因为它必须调用 JS 解释器,而许多其他结构则可被现代 JS 引擎进行优化。
vue中绑定样式的两种方法
使用class样式
1.数组
直接传递数组,但是需要使用v-bind做数据绑定
<h1 :class='[ 'xx' ]'>
2.数组中使用三元表达式
使用三元表达式
<h1 :class='[flag?'active':' ']'
3.数组中嵌套对象
代码更有可读性
<h1 :class="['xx',{'active':flag}]">
4.直接使用对象
内联样式绑定style
注意:像font-size这样中间带-的需要加引号 ‘font-size’:60
可以直接在p h1等上写也可以引用data中的
方法
获取时间
年getFullYear() 月getMonth 日getDate
返回 return’ ${y}‘ -${m}-${d}'
分秒 的’${y}-...... ${hh}:${mm}:${ss}‘
some
可以中止
如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
如果没有满足条件的元素,则返回false。
findindex:查找索引
只能查找比较单一,some可以内部进行操作
splice:删除数组元素
例子:this.list.splice(i,1);
i是索引,1是删几个
indexOf() :可返回某个指定的字符串值在字符串中首次出现的位置
.foreach:循环的结果是数组每一项的值
过滤器
mustachc插值
v-bind表达式
filter:过滤
filters(有s的)私有的过滤器,写在组件中的,过滤器调用的时候,采用的是就近原则,
如果私有过滤器和全局过滤器名称一致,这时候优先调用私有过滤器
使用
定义:Vue.filter('过滤器名称',function(){})
过滤器function第一个参数已经规定死了,永远是管道前传递过来的数据
replace方法 第一个参数除了可写一个字符串之外还可以定义一个正则表达式 /xx/g
调用:{{ name | 过滤器名称}} ( | 是过滤器管道 )
object
object.definproperty
给对象定义添加属性
写法:object.definproperty(对象,'属性名',参数(配置项))
参数不可被枚举 修改 删除
想要参数枚举 添加: enumerable:true 默认为false
想要修改 添加 : writable:true
想要删除 添加 : configurable:true
get函数(当有人读取对象的xx属性时,个体函数即getter就会被调用,且返回值就是xx属性的值)
set函数(当修改对象的xx属性时,set函数就会被调用即setter就会被调用,且会收到修改的具体值)
数据代理
一个对象代理对另一个对象中属性的操作(读/写)
通过get set 把data中数据传入vm 中成_data(数据劫持)在这里插入代码片
object.keys(对象名)
提取成数组
获取焦点focus
统一字符串小写 方法名.toLowerCase() ==='待统一的字符串 '
生命周期
创建期间的生命周期函数
beforeCreate(){} 这是我们遇到的第一个生命周期函数 表示实例完全被创建之前会执行它
注意:再beforeCreate生命周期函数执行的时候,data和methods 中的数据都还没有初始化
created(){} 在created中 data methods已经被初始化好了。 如果要调用methods中的方法或data中的数据时 ,最早只能在created
before Mount(){} 这是遇到的第三个生命周期函数 表示模板已经在内存中编辑完成了 但是尚未把模板渲染到页面中
mounted 数据绑定完成,真实 DOM 已挂载到页面,vm.$el可获取真实 DOM
运行期间的生命周期函数
beforeUpdate 数据更新,DOM Diff 得到差异,未更新到页面
updated 数据更新,页面也已更新
销毁期间生命周期函数
beforeDestroy 实例销毁前
destroyed 实例销毁完成
computed和methods区别
多次使用时:methods每次都会调用
computed:计算机会缓存,不变的情况只调用一次 (computed 只考虑读取不考虑修改的时候 才能用简写形式)
watch和computed
区别:
1.computed能完成的功能,watch都能实现
2.watch能完成的功能,computed不一定能完成。例如:watch可以进行异步操作
原理:
computed比较依靠return的结果 不能使计算结果有延迟 即不能开启异步任务
watch不依赖于输出结果 可以开启异步任务
同时能实现时优先使用computed
重要小原则:
1.所有被Vue管理的函数,最好写成普通函数,这样this指向的是vm
2.所有不被Vue管理的函数(定时器的回调函数,ajax的回调函数,promise函数等),最好写成箭头函数,这样this的指向才是vm或者组件实例对象,而不是window
总结:目的都是为了让this指向vm
el和data多种写法
el
var x =newVue({ el:'xxx', data:{name:'xx'} })
const x=new Vue({ data:{name:'xx'} }) console.log(x) x.$mount('#xxx')
data
data:{name:'xx'}
data:function(){ return {name:'xxx'}}
Mvvm
M 模型model :对应data中的数据
V 视图View :模板
VM:视图模型(vieModel):Vue实例对象
按键事件
1.常用
tab是特殊的 需要搭配keydown使用
2.vue未提供别名的按键,可以使用按键原始的key值去绑定,但注意转为kebab-case(短横线命名)
3.系统修饰键(用法特殊):ctrl、alt、shift、meta
1)配合keyup使用:按下修饰键的同时,再按下其他键,随后释放其他键,事件才被触发
2)配合keydown使用:正常触发事件
4.也可以使用keycode去指定具体的按键(不推荐的方法)
5.Vue.config.keyCode.自定义键名 = 键码 ,可以去定制按键别名
监视属性watch
handler(回调函数)
immediate:初始化时让handler调用一下
写法
vm.$watch('被监测对象',{ })
创建实例时,不明确监测对象是谁,通过用户的行为来监视 来调用api
watch:{ 被监测对象:{ } }
创建时明确监视对象是谁
当监视属性变化时,回调函数自动调用,进行相关操作
监视属性必须存在,才能进行监视
深度监视 (监视多级结构所有属性的变化)
vue中的watch默认不监测内部值的改变(一层)
配置deep:true 可以监视对象内部值的改变(多层)
vue自身可以监测对象内部值的变化而watch默认不行
使用watch时根据数据的具体结构,决定是否采用深度监视