不支持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({
// ...
})
複製代碼