詳細(xì)聊聊Vue中的options選項(xiàng)
Vue中的options選項(xiàng)
options的五類屬性
- 數(shù)據(jù): data,props,propsdata,computed,methods,watch
- DON: el,template,render,rebderError
- 生命周期鉤子函數(shù):beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,activated,deactivated,beforeDestroy,destroyed,erroCaptured。
- 資源:directives,filters,components
- 組合:parent,mxins,extends,provide,inject
入門屬性
- el(掛在點(diǎn))
new Vue({
el:"#app"
template:`<div>我是小明</div>`
})
可以使用$mount代替
new Vue({
template:`<div>我是小明</div>`
}).$mount("#app")- data(內(nèi)部數(shù)據(jù))支持對象和函數(shù),優(yōu)先使用函數(shù)
- 會被Vue監(jiān)聽
- 會被Vue實(shí)例代理
- 每次data的讀寫都會被Vue監(jiān)聽
- Vue會在data變化是更新UI
對象
new Vue({
template:"<div>{{n}}</div>",
data:{
n:0
}
}).$mount('#app')
函數(shù)
vue非完整版只支持函數(shù)
new Vue({
template:"<div>{{n}}</div>",
data(){
return {
m:5
}
}
})$mount('#app')- methods(方法)事件處理函數(shù)或者普通函數(shù)
new Vue({
template:"<div>{{n}}{{ add()}} <button @click="add">按鈕</button></div>",
data:{
n:0
},
methods:{
add(){
console.log('我可以是事件處理函數(shù)也可以是普通函數(shù)')
}
}
}).$mount('#app')- components(vue組件:注意大小寫)三種方式
注冊全局組件
Vue.component('Deon1', {
template: "<h2>全局組件</h2>"
})
注冊局部組件
const deon2 = {
template: "<h2>局部組件 {{n}}</h2>",
//在組建中data必須使用函數(shù)
data() {
return {
n: "小明"
}
}
}
new Vue({
components: {
Deon2: deon2,
Deon3:{
template:"<h2>組件3</h3>"
}
},
template: `
<div>頁面
<Deon1></Deon1>
<Deon2></Deon2>
<Deon3></Deon3>
</div>
`
}).$mount('#app')使用vue文件添加組件
deon4.vue文件
<template>
<div>我是deon.vue文件{{ name }}</div>
</template>
<script>
export default {
data() {
name: "組件4";
},
};
</script>
<style scoped>
div {
border: 1px solid red;
}
</style>main.js
import Deon4 from './deon4.vue'
Vue.component('Deon1', {
template: "<h2>全局組件</h2>"
})
const deon2 = {
template: "<h2>局部組件 {{n}}</h2>",
//在組建中data必須使用函數(shù)
data() {
return {
n: "小明"
}
}
}
new Vue({
components: {
Deon2: deon2,
Deon3: {
template: "<h2>組件3</h3>"
},
Deon4
},
template: `
<div>頁面
<Deon1></Deon1>
<Deon2></Deon2>
<Deon3></Deon3>
<Deon4><Deon4>
</div>
`
}).$mount('#app')- 常用的四個(gè)生命周鉤子函數(shù)
- created: 實(shí)例出現(xiàn)在內(nèi)存中
- mounted:實(shí)例出現(xiàn)在頁面中觸發(fā)
- updated:實(shí)例出現(xiàn)了變化觸發(fā)
- destroyed:實(shí)例被銷毀了觸發(fā)
new Vue({
template:"<div>{{n}}</div>",
data:{
n:0
},
created() {
console.log("實(shí)例出現(xiàn)在內(nèi)存中了觸發(fā)");
},
mounted() {
console.log("實(shí)例出現(xiàn)在頁面中觸發(fā)");
},
updated() {
console.log("實(shí)例出現(xiàn)了變化觸發(fā)");
},
destroyed() {
console.log("實(shí)例被銷毀了觸發(fā)");
}
}).$mount('#app')- props(外部數(shù)據(jù))父組件想子組傳值
- name="n"(傳入字符串)
- :name="n"(傳入this.n數(shù)據(jù))
- :fn="add":(傳入this.add函數(shù))
new Vue({
components: {
Deon1: {
props: ["m"],
template: "<div>{{m}}</div>"
}
},
template: `<div><Deon1 :m="m"></Deon1></div>`,
data: {
m: 666
}
}).$mount('#app')computed(計(jì)算屬性)
- 不需要加括號
- 他會根據(jù)依賴是否變化來緩存(如果依賴沒有變化,就不會重新結(jié)算)
- 類型:
{ [key: string]: Function | { get: Function, set: Function } }
用途
緩存
- 如果依賴的屬性沒有變,化就不會重新計(jì)算
- getter/setter默認(rèn)不會做緩存,Vue做了特殊處理
- 如何緩存?看示例 這是示例不是Vue的實(shí)現(xiàn)
示例:
var vm = new Vue({
data: { a: 1 },
computed: {
// 僅讀取
aDouble: function () {
return this.a * 2
},
// 讀取和設(shè)置
aPlus: {
get: function () {
return this.a + 1
},
set: function (v) {
this.a = v - 1
}
}
}
})
vm.aPlus // => 2
vm.aPlus = 3
vm.a // => 2
vm.aDouble // => 4watch(監(jiān)聽)
- data變化,就會執(zhí)行函數(shù)
- options.watch用法
- this.$watch用法
- deep:偵聽的對象的 property 改變時(shí)被調(diào)用,不論其被嵌套多深
- immediate:偵聽開始之后被立即調(diào)用
- 類型:
{ [key: string]: string | Function | Object | Array }
用途
- 當(dāng)數(shù)據(jù)變化時(shí),執(zhí)行一個(gè)函數(shù)
- 例子1撤銷
- 例子2 模擬computed 這樣很傻,一般不這樣做
何為變化
- 看示例
原本 let obj = {a:'a'} 現(xiàn)在 obj={a:'a'} 請問
obj變了沒有. obj.a變了沒有
簡單類型看至,復(fù)雜類型(對象)看地址
這其實(shí)就是 ===的規(guī)則
示例:
var vm = new Vue({
data: {
a: 1,
b: 2,
c: 3,
d: 4,
e: {
f: {
g: 5
}
}
},
watch: {
a: function (val, oldVal) {
console.log('new: %s, old: %s', val, oldVal)
},
// 方法名
b: 'someMethod',
// 該回調(diào)會在任何被偵聽的對象的 property 改變時(shí)被調(diào)用,不論其被嵌套多深
c: {
handler: function (val, oldVal) { /* ... */ },
deep: true//監(jiān)聽是否深入
},
// 該回調(diào)將會在偵聽開始之后被立即調(diào)用
d: {
handler: 'someMethod',
immediate: true
},
// 你可以傳入回調(diào)數(shù)組,它們會被逐一調(diào)用
e: [
'handle1',
function handle2 (val, oldVal) { /* ... */ },
{
handler: function handle3 (val, oldVal) { /* ... */ },
/* ... */
}
],
// watch vm.e.f's value: {g: 5}
'e.f': function (val, oldVal) { /* ... */ }
}
})
vm.a = 2 // => new: 2, old: 1注意,不應(yīng)該使用箭頭函數(shù)來定義 watcher 函數(shù) (例如 searchQuery: newValue => this.updateAutocomplete(newValue))。理由是箭頭函數(shù)綁定了父級作用域的上下文,所以 this 將不會按照期望指向 Vue 實(shí)例,this.updateAutocomplete 將是 undefined
deep: true是干什么的?
如果object.a變了,請問object算不算變
如果需要的答案是(也沒變啦),那么就用deep: true
如果需要的答案是(沒有變),那么就用deep: false
deep的意思是監(jiān)聽 object的時(shí)候是否往深了看
computed和watch的區(qū)別
computed計(jì)算屬性
- computed是計(jì)算屬性,也就是依賴某個(gè)值或者props通過計(jì)算得來得數(shù)據(jù);
- computed的值是在getter執(zhí)行之后進(jìn)行緩存的,只有在它依賴的數(shù)據(jù)發(fā)生變化,會重新調(diào)用getter來計(jì)算;
- 不支持異步,當(dāng)computed內(nèi)有異步操作時(shí)無效,無法監(jiān)聽數(shù)據(jù)的變化
- 調(diào)用時(shí)不需要加括號
watch 監(jiān)聽器
- watch是監(jiān)聽器,可以監(jiān)聽某一個(gè)數(shù)據(jù),然后執(zhí)行相應(yīng)的操作;
- 不支持緩存,數(shù)據(jù)變直接會觸發(fā)相應(yīng)的操作;
- 監(jiān)聽的函數(shù)接收兩個(gè)參數(shù),第一個(gè)參數(shù)是最新的值;第二個(gè)參數(shù)是輸入之前的值;
- 支持異步操作;
- deep選項(xiàng):偵聽的對象的 property 改變時(shí)被調(diào)用,不論其被嵌套多深
- immediate:為true時(shí)偵聽開始之后被立即調(diào)用
總結(jié)
到此這篇關(guān)于Vue中options選項(xiàng)的文章就介紹到這了,更多相關(guān)Vue的options選項(xiàng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue基于element-ui的三級CheckBox復(fù)選框功能的實(shí)現(xiàn)代碼
最近vue項(xiàng)目需要用到三級CheckBox復(fù)選框,需要實(shí)現(xiàn)全選反選不確定三種狀態(tài)。這篇文章主要介紹了vue基于element-ui的三級CheckBox復(fù)選框功能的實(shí)現(xiàn)方法,需要的朋友可以參考下2018-10-10
vue怎樣獲取當(dāng)前時(shí)間,并且傳遞給后端(不用注解)
這篇文章主要介紹了vue怎樣獲得當(dāng)前時(shí)間,并且傳遞給后端(不用注解)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
vue項(xiàng)目打包清除console.log的4種方法
項(xiàng)目打包的時(shí)候想要刪除console.log,本文主要介紹了vue項(xiàng)目打包清除console.log的4種方法,具有一定的參考價(jià)值,感興趣的可以了解游戲2023-11-11

