掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都網(wǎng)站建設、做網(wǎng)站、相山網(wǎng)絡推廣、重慶小程序開發(fā)公司、相山網(wǎng)絡營銷、相山企業(yè)策劃、相山品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供相山建站搭建服務,24小時服務熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
Function 返回組件實例的 data 對象的函數(shù)。在 data 中,我們不建議觀察具有自身狀態(tài)行為的對象,如瀏覽器 API 對象和原型 property。一個好主意是這里只有一個表示組件 data 的普通對象。
一旦觀察過,你就無法在根數(shù)據(jù)對象上添加響應式 property。因此推薦在創(chuàng)建實例之前,就聲明所有的根級響應式 property。
實例創(chuàng)建之后,可以通過 vm.$data 訪問原始數(shù)據(jù)對象。組件實例也代理了 data 對象上所有的 property,因此訪問 vm.a 等價于訪問 vm.$data.a。
以 _ 或 $ 開頭的 property 不會被組件實例代理,因為它們可能和 Vue 內(nèi)置的 property、API 方法沖突。你可以使用例如 vm.$data._property 的方式訪問這些 property。
// 直接創(chuàng)建一個實例
const data = { a: 1 }
// 這個對象將添加到組件實例中
const vm = Vue.createApp({
data() {
return data
}
}).mount('#app')
console.log(vm.a) // => 1 注意,如果你為 data property 使用了箭頭函數(shù),則 this 不會指向這個組件的實例,不過你仍然可以將其實例作為函數(shù)的第一個參數(shù)來訪問。
data: vm => ({ a: vm.myProp })Array | Object props 可以是數(shù)組或對象,用于接收來自父組件的數(shù)據(jù)。props 可以是簡單的數(shù)組,或者使用對象作為替代,對象允許配置高階選項,如類型檢測、自定義驗證和設置默認值。
你可以基于對象的語法使用以下選項:
type:可以是下列原生構造函數(shù)中的一種:String、Number、Boolean、Array、Object、Date、Function、Symbol、任何自定義構造函數(shù)、或上述內(nèi)容組成的數(shù)組。會檢查一個 prop 是否是給定的類型,否則拋出警告。Prop 類型的更多信息在此。default:any 為該 prop 指定一個默認值。如果該 prop 沒有被傳入,則換做用這個值。對象或數(shù)組的默認值必須從一個工廠函數(shù)返回required:Boolean 義該 prop 是否是必填項。在非生產(chǎn)環(huán)境中,如果這個值為 truthy 且該 prop 沒有被傳入的,則一個控制臺警告將會被拋出。validator:Function 自定義驗證函數(shù)會將該 prop 的值作為唯一的參數(shù)代入。在非生產(chǎn)環(huán)境下,如果該函數(shù)返回一個 falsy 的值 (也就是驗證失敗),一個控制臺警告將會被拋出。你可以在這里查閱更多 prop 驗證的相關信息。 const app = Vue.createApp({})
// 簡單語法
app.component('props-demo-simple', {
props: ['size', 'myMessage']
})
// 對象語法,提供驗證
app.component('props-demo-advanced', {
props: {
// 類型檢查
height: Number,
// 類型檢查 + 其他驗證
age: {
type: Number,
default: 0,
required: true,
validator: value => {
return value >= 0
}
}
}
}){ [key: string]: Function | { get: Function, set: Function } } 計算屬性將被混入到組件實例中。所有 getter 和 setter 的 this 上下文自動地綁定為組件實例。
注意,如果你為一個計算屬性使用了箭頭函數(shù),則 this 不會指向這個組件的實例,不過你仍然可以將其實例作為函數(shù)的第一個參數(shù)來訪問。
computed: {
aDouble: vm => vm.a * 2
}計算屬性的結果會被緩存,除非依賴的響應式 property 變化才會重新計算。注意,如果某個依賴 (比如非響應式 property) 在該實例范疇之外,則計算屬性是不會被更新的。
const app = Vue.createApp({
data() {
return { a: 1 }
},
computed: {
// 僅讀取
aDouble() {
return this.a * 2
},
// 讀取和設置
aPlus: {
get() {
return this.a + 1
},
set(v) {
this.a = v - 1
}
}
}
})
const vm = app.mount('#app')
console.log(vm.aPlus) // => 2
vm.aPlus = 3
console.log(vm.a) // => 2
console.log(vm.aDouble) // => 4{ [key: string]: Function } methods 將被混入到組件實例中。可以直接通過 VM 實例訪問這些方法,或者在指令表達式中使用。方法中的 this 自動綁定為組件實例。
注意
注意,不應該使用箭頭函數(shù)來定義 method 函數(shù) (例如 plus:() => this.a++)。理由是箭頭函數(shù)綁定了父級作用域的上下文,所以 this 將不會按照期望指向組件實例,this.a 將是 undefined。
const app = Vue.createApp({
data() {
return { a: 1 }
},
methods: {
plus() {
this.a++
}
}
})
const vm = app.mount('#app')
vm.plus()
console.log(vm.a) // => 2{ [key: string]: string | Function | Object | Array} 一個對象,鍵是需要觀察的表達式,值是對應回調函數(shù)。值也可以是方法名,或者包含選項的對象。組件實例將會在實例化時調用 $watch(),參閱 $watch,了解更多關于 deep、immediate 和 flush 選項的信息。
const app = Vue.createApp({
data() {
return {
a: 1,
b: 2,
c: {
d: 4
},
e: 'test',
f: 5
}
},
watch: {
a(val, oldVal) {
console.log(`new: ${val}, old: ${oldVal}`)
},
// 字符串方法名
b: 'someMethod',
// 該回調會在任何被偵聽的對象的 property 改變時被調用,不論其被嵌套多深
c: {
handler(val, oldVal) {
console.log('c changed')
},
deep: true
},
// 該回調將會在偵聽開始之后被立即調用
e: {
handler(val, oldVal) {
console.log('e changed')
},
immediate: true
},
// 你可以傳入回調數(shù)組,它們會被逐一調用
f: [
'handle1',
function handle2(val, oldVal) {
console.log('handle2 triggered')
},
{
handler: function handle3(val, oldVal) {
console.log('handle3 triggered')
}
/* ... */
}
]
},
methods: {
someMethod() {
console.log('b changed')
},
handle1() {
console.log('handle 1 triggered')
}
}
})
const vm = app.mount('#app')
vm.a = 3 // => new: 3, old: 1注意
注意,不應該使用箭頭函數(shù)來定義 watcher 函數(shù) (例如 searchQuery: newValue => this.updateAutocomplete(newValue))。理由是箭頭函數(shù)綁定了父級作用域的上下文,所以 this 將不會按照期望指向組件實例,this.updateAutocomplete 將是 undefined。
Array | Object emits 可以是數(shù)組或對象,從組件觸發(fā)自定義事件,emits 可以是簡單的數(shù)組,或者對象作為替代,允許配置和事件驗證。
在對象語法中,每個 property 的值可以為 null 或驗證函數(shù)。驗證函數(shù)將接收傳遞給 $emit 調用的其他參數(shù)。如果 this.$emit('foo',1) 被調用,foo 的相應驗證函數(shù)將接收參數(shù) 1。驗證函數(shù)應返回布爾值,以表示事件參數(shù)是否有效。
const app = Vue.createApp({})
// 數(shù)組語法
app.component('todo-item', {
emits: ['check'],
created() {
this.$emit('check')
}
})
// 對象語法
app.component('reply-form', {
emits: {
// 沒有驗證函數(shù)
click: null,
// 帶有驗證函數(shù)
submit: payload => {
if (payload.email && payload.password) {
return true
} else {
console.warn(`Invalid submit event payload!`)
return false
}
}
}
})注意
emits 選項中列出的事件不會從組件的根元素繼承,也將從 $attrs property 中移除。

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流