**1.4.1.** **效果** *(03\_*計(jì)算屬性和監(jiān)視*/test.html)*

**1.4.2.** **計(jì)算屬性**
1) 在 `computed` 屬性對(duì)象中定義計(jì)算屬性的方法
2) 在頁(yè)面中使用`{{方法名}}`來(lái)顯示計(jì)算的結(jié)果
**1.4.3.** **監(jiān)視屬性**
1) 通過(guò)通過(guò) `vm` 對(duì)象的`$watch()`或 `watch` 配置來(lái)監(jiān)視指定的屬性
2) 當(dāng)屬性變化時(shí), 回調(diào)函數(shù)自動(dòng)調(diào)用, 在函數(shù)內(nèi)部進(jìn)行計(jì)算
**1.4.4.** **計(jì)算屬性高級(jí)**
1) 通過(guò)` getter/setter` 實(shí)現(xiàn)對(duì)屬性數(shù)據(jù)的顯示和監(jiān)視
2) 計(jì)算屬性存在緩存, 多次讀取只執(zhí)行一次 getter 計(jì)算
**1.4.5.** **編碼**
```
<div id="demo">
姓: <input type="text" placeholder="First Name" v-model="firstName"><br>
名: <input type="text" placeholder="Last Name" v-model="lastName"><br>
<!--fullName1是根據(jù)fistName和lastName計(jì)算產(chǎn)生-->
姓名1(單向): <input type="text" placeholder="Full Name1" v-model="fullName1"><br>
姓名2(單向): <input type="text" placeholder="Full Name2" v-model="fullName2"><br>
姓名3(雙向): <input type="text" placeholder="Full Name3" v-model="fullName3"><br>
<p>{{fullName1}}</p>
<p>{{fullName1}}</p>
</div>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
const vm = new Vue({
el: '#demo',
data: {
firstName: 'A',
lastName: 'B',
fullName2: 'A-B'
},
// 計(jì)算屬性配置: 值為對(duì)象
computed: {
fullName1 () { // 屬性的get()
console.log('fullName1()', this)
return this.firstName + '-' + this.lastName
},
fullName3: {
// 當(dāng)獲取當(dāng)前屬性值時(shí)自動(dòng)調(diào)用, 將返回值(根據(jù)相關(guān)的其它屬性數(shù)據(jù))作為屬性值
get () {
console.log('fullName3 get()')
return this.firstName + '-' + this.lastName
},
// 當(dāng)屬性值發(fā)生了改變時(shí)自動(dòng)調(diào)用, 監(jiān)視當(dāng)前屬性值變化, 同步更新相關(guān)的其它屬性值
set (value) {// fullName3的最新value值 A-B23
console.log('fullName3 set()', value)
// 更新firstName和lastName
const names = value.split('-')
this.firstName = names[0]
this.lastName = names[1]
}
}
},
watch: {
// 配置監(jiān)視firstName
firstName: function (value) { // 相當(dāng)于屬性的set
console.log('watch firstName', value)
// 更新fullName2
this.fullName2 = value + '-' + this.lastName
}
}
})
// 監(jiān)視lastName
vm.$watch('lastName', function (value) {
console.log('$watch lastName', value)
// 更新fullName2
this.fullName2 = this.firstName + '-' + value
})
</script>
```
- vue 核心
- 1.1. Vue 的基本認(rèn)識(shí)
- 1.2. Vue 的基本使用
- 1.3. 模板語(yǔ)法
- 1.4. 計(jì)算屬性和監(jiān)視
- 1.5. class 與 style 綁定
- 1.6. 條件渲染
- 1.7. 列表渲染
- 1.8. 事件處理
- 1.9. 表單輸入綁定
- 1.10. Vue 實(shí)例生命周期
- 1.11. 過(guò)渡&動(dòng)畫
- 1.12. 過(guò)濾器
- 1.13. 內(nèi)置指令與自定義指令
- 1.14. 自定義插件
- 第二章:vue 組件化編碼
- 2.1使用 vue-cli 創(chuàng)建模板項(xiàng)目
- 2.2. 項(xiàng)目的打包與發(fā)布
- 2.3. eslint
- 2.4. 組件定義與使用
- 2.5. 組件間通信
- 2.6. 組件間通信 1: props
- 2.7. 組件間通信 2: vue 自定義事件
- 2.8. 組件間通信 3: 消息訂閱與發(fā)布(PubSubJS 庫(kù))
- 2.9. 組件間通信 4: slot
- 2.10. demo1
- 2.11. demo2