不支持ie8及如下,部分兼容ie9 ,彻底兼容10以上, 由于vue的响应式原理是基于es5的Object.defineProperty()
,而这个方法不支持ie8及如下。css
beforeCreate
:实例建立前被调用;created
:实例建立后被调用,完成数据观测,属性和方法的运算,watch/event事件回调,模板渲染成html前(vm.$el未定义)故数据初始化最好在这阶段完成;beforeMount
:在$el
挂载前被调用,相关的 render 函数首次被调用,期间将模块渲染成html,此时vm.$el
仍是未定义;mounted
:在$el
挂载后被调用,此时vm.$el
能够调用,不能保证全部的子组件都挂载,要等视图所有更新完毕用vm.$nextTick()
;beforeUpdate
:数据更新时调用;updated
:数据更新后调用;activated
:<keep-alive></keep-alive>
包裹的组件激活时调用;deactivated
:<keep-alive></keep-alive>
包裹的组件离开时调用;beforeDestroy
:实例销毁以前调用,此时实例仍然彻底可用;destroyed
:实例销毁以后调用,此时实例的全部东西都会解绑定,全部的事件监听器会被移除,全部的子实例也会被销毁。不能同名,由于不论是computed属性名仍是data数据名仍是props数据名都会被挂载在vm实例上,所以这三个都不能同名。html
if (key in vm.$data) {
warn(`The computed property "${key}" is already defined in data.`, vm)
} else if (vm.$options.props && key in vm.$options.props) {
warn(`The computed property "${key}" is already defined as a prop.`, vm)
}
复制代码
不能同名,由于看源码vue
let data = vm.$options.data
const keys = Object.keys(data)
const methods = vm.$options.methods
let i = keys.length
while (i--) {
const key = keys[i]
if (process.env.NODE_ENV !== 'production') {
if (methods && hasOwn(methods, key)) {
warn(
`Method "${key}" has already been defined as a data property.`,
vm
)
}
}
}
复制代码
用<keep-alive></keep-alive>
内置组件包裹路由组件,在钩子函数activated中更新。缓存
不能够。this
会是undefind
,由于箭头函数中的this指向的是定义时的this,而不是执行时的this,因此不会指向Vue实例的上下文。bash
watch:{
show:(val)=>{
console.log(this)//undefind this会指向show
},
id(val){
conosle.log(this)//Vue实例对象
}
}
复制代码
在选项参数中指定immediate: true
将当即以表达式的当前值触发回调。服务器
watch:{
a:{
handler:function(val,oldval){
},
deep:true
}
}
复制代码
不能够。this
会是undefind
,由于箭头函数中的this指向的是定义时的this,而不是执行时的this,因此不会指向Vue实例的上下文。less
this.$emit('eventName',data)
,data
能够是个对象,包含子组件的多个参数,而后传给父组件。ide
<base-input ref="myInput"></<base-input>
this.$refs.myInput.focus()
;this.$refs.myInput.value
。<ul ref="mydiv">
<li class="item">第一个li</li>
<li class="item">第一个li</li>
</ul>
console.log(this.$refs['mydiv'].getElementsByClassName('item')[0].innerHTML)//第一个li
复制代码
使用this.$parent
来访问函数
this.$root
post
v-if='false'
;vm.$destroy()
;动态组件
<component :is="componentName"></component>
, componentName
能够是在本页面已经注册的局部组件名和全局组件名,也能够是一个组件的选项对象。 当控制componentName
改变时就能够动态切换选择组件。
is的用法
有些HTML元素,诸如 <ul>、<ol>、<table>
和<select>
,对于哪些元素能够出如今其内部是有严格限制的。
而有些HTML元素,诸如 <li>、<tr> 和 <option>
,只能出如今其它某些特定的元素内部。
<ul>
<card-list></card-list>
</ul>
复制代码
因此上面<card-list></card-list>
会被做为无效的内容提高到外部,并致使最终渲染结果出错。应该这么写:
<ul>
<li is="cardList"></li>
</ul>
复制代码
props
this.$emit('input',data)
this.$root.$on('input',function(data){})
和this.$root.$emit('emit',data)
this.$refs.tree
this.$parent
provide
和inject
String、Number、Boolean、Array、Object、Date、Function、Symbol, 此外还能够是一个自定义的构造函数Personnel,而且经过 instanceof 来验证propwokrer的值是不是经过这个自定义的构造函数建立的。
function Personnel(name,age){
this.name = name;
this.age = age;
}
export default {
props:{
wokrer:Personnel
}
}
复制代码
export default {
props:{
propA:[String,Number],
propB:{
type:Number,
default:1,
},
propC:Boolean,
propD:{
type:Object,
default(){
return{}
}
}
}
}
复制代码
@click="handleOpen"
默认第一个参数传入event对象;@click="handleOpen(0, $event)"
,若是本身须要传入参数和event
对象,则须要使用$event
来获取event
对象并传入handleOpen。$event
,使用$event.target
和$event.currentTarget
有什么区别?$event.currentTarget
始终指向事件所绑定的元素,而$event.target
指向事件发生时的元素。
.stop
:阻止事件传递;.prevent
: 阻止默认事件;.capture
:在捕获的过程监听,没有capture修饰符时都是默认冒泡过程监听;.self
:当前绑定事件的元素才能触发;.once
:事件只会触发一次;.passive
:默认事件会当即触发,不要把.passive
和.prevent
一块儿使用,由于.prevent
将不起做用。要注意顺序很重要,用@click.prevent.self
会阻止全部的点击,而@click.self.prevent
只会阻止对元素自身的点击。
使用按键修饰符 <input @keyup.enter="submit">
按下回车键时候触发submit事件。
.enter
.tab
.delete
(捕获“删除”和“退格”键).esc
.space
.up
.down
.left
.right
v-show
、v-if
、v-else-if
、v-else
、v-for
、v-on
、v-bind
、v-model
、v-once
、v-slot
、v-html
、v-text
。
v-show
,切换元素的display属性,来控制元素显示隐藏,初始化会渲染,适用频繁显示隐藏的元素,不能用在<template>
上;v-if
,经过销毁并重建组件,来控制组件显示隐藏,初始化不会渲染,不适用频繁显示隐藏的组件,能够用在<template>
上。能够,v-on
后面接一个对象,可是不支持事件修饰符。
<template>
<div v-on:{click:a,dblclick:b}></div>
</template>
<script>
methods:{
a(){
alert(1)
},
b(){
alert(2)
}
}
</script>
复制代码
v-clock
:能够解决在页面渲染时把未编译的 Mustache 标签({{value}}
)给显示出来。[v-cloak] {
display: none!important;
}
<div v-cloak>
{{ message }}
</div>
复制代码
v-pre
:跳过这个元素和它的子元素的编译过程。能够用来显示原始Mustache标签。跳过大量没有指令的节点会加快编译。 <span v-pre>{{ this will not be compiled }}</span>
<style lang="less" scoped></style>
若是在公共组件中使用,修改公共组件的样式须要用/deep/
。
comments
选项设置为true
<template comments> ... <template>
vm.$nextTick(() =>{this.handleadd()})
,将handleadd回调延迟到下次 DOM 更新循环以后执行。
Object.assign(this.$data,this.$options.data())
filters:{
addUnit(val){
if(val){
return val+'元/米'
}else{
return ''
}
}
}
Vue.filter('addUnit',function(val){
if(val){
return val+'元/米'
}else{
return ''
}
})
new Vue({
// ...
})
复制代码