vue學習筆記(八)---- vue中的例項屬性(wacth和computed的使用)
一、watch屬性的使用
1.傳統方式實現雙向資料改變監聽事件(姓名拼接案例)
<div id="app">
姓:
<input type="text" value="" @keyup="textChange()" v-model="firstname"/> +
名:
<input type="text" value="" @keyup="textChange()" v-model="lastname"/> =
姓名:
<input type="text" value="" v-model="fullname"/>
</div>
var vm = new Vue({
el: '#app',
data: {
firstname: '',
lastname: '',
fullname: ''
},
methods: {
textChange(){
this.fullname = this.firstname+ this.lastname
}
}
});
來吧展示:
watch:{
'firstname':function () {
console.log('firstname被監聽到了')
}
}
2.使用watch監聽事件改變(姓名拼接案例)
將methods方法除掉,然後改用watch去監聽事件的變化
watch:{
//函式中有兩個引數,newval和oldval
//newval:最新的值
//oldval:上一次的值
'firstname':function (newval,oldval) {
// console.log('firstname被監聽到了')
console.log('新值:'+newval +'-----' +'舊值:'+oldval)
}
}
watch方式實現姓名拼接
watch:{
'firstname':function (newval,oldval) {
this.fullname = newval + this.lastname
//或者是
// this.fullname = this.firstname + this.lastname
},
'lastname':function (newval,oldval) {
this.fullname = this.firstname + this.lastname
}
}
3. 使用watch監聽url地址的改變
需求:當元件進行切換時,在頁面上顯示一句話 歡迎進入登入頁面 / 註冊頁面
通過檢視知道$router的path對應的就是url跳轉的路由地址
所以我們可以通過watch去監聽得到url地址
<div id="app">
<router-link to="/login">點選登入</router-link>
<router-link to="/res">點選註冊</router-link>
<router-view></router-view>
<!-- 當元件切換時,在頁面上顯示一句話 歡迎進入 登入頁面 / 註冊頁面-->
<h2>{{msg}}</h2>
</div>
<script>
var login = {
template:'<h2>登入元件</h2>'
}
var res = {
template:'<h2>註冊元件</h2>'
}
var router = new VueRouter({
routes:[
{path:'/login',component:login},
{path:'/res',component:res}
]
})
var vm = new Vue({
el: '#app',
data: {
//msg:'歡迎訪問----'
msg:''
},
created() { // 這個 created 生命週期函式,在頁面剛被開啟的時候會執行,同時,如果頁面被重新整理了,也會執行
// console.log('okokok')
const path = this.$route.path
if (path === '/login') {
this.msg = '歡迎進入登入頁面'
} else if (path === '/reg') {
this.msg = '歡迎進入註冊頁面'
}
},
router,
watch: { //watch是一個物件,物件上是一些鍵值對
// 在 watch 中,可以監聽當前 vm 例項上所有的屬性變化, 頁面的重新整理,不會觸發 $router.path 的改變事件
'$route.path': function (newval) {
// console.log(newval)
if (newval === '/login') {
this.msg = '歡迎進入登入頁面'
} else if (newval === '/reg') {
this.msg = '歡迎進入註冊頁面'
}
}
}
});
</script>
小結:根據$router的path的不同就能監聽url地址的改變
$router屬於this,而this就是當前的vm例項,通過訪問監聽
this當前例項身上的.path屬性就能監聽到地址的變化
data中的msg也是vm例項身上的,頁面可以通過this來獲取到,所以可以通過watch來監聽path的變化,從而改變data身上的msg通過切換元件的不同展示不同的msg到頁面上
二、computed計算屬性的基本使用
1.使用computed計算屬性實現姓名拼接案例
<script>
var vm = new Vue({
el: '#app',
data: {
firstname: '',
lastname: ''
},
computed: { // 計算屬性區域
//只要訪問fullname,那麼內部就會呼叫這個方法,return做一個拼接,一引用一次就會呼叫一次
'fullname': function () {
// 這個 fullname 就是就是計算屬性
// 在頁面中,使用計算屬性的時候,永遠把它當作普通的屬性來使用
// 只要 計算屬性的 function中,所依賴的任何資料發生變化了,則會觸發 計算屬性的重新求值
// 計算屬性的值,如果被第一計算後,沒有發生過變化,則會 把 第一次的值,快取起來,供後續使用,這樣能夠提高效能
console.log('ok')
return this.firstname + '-' + this.lastname
}
}
});
</script>
</script>
來吧展示:
上述案例存在的一個問題是,fullname只能獲取到firstname和lastname的值,並不能給他們賦值,也就是即便刪掉fullname文字框中的值,也不會改變firstname和lastname中的值
解決方法 ----> 通過computed計算屬性的get和set方法去解決
2. computed計算屬性的get和set方法的使用
computed: { // 計算屬性區域
'fullname': {
get() { // get 表示外界要引用 fullname 的值
console.log('呼叫了fullname的get方法')
return this.firstname + '-' + this.lastname
},
set(val) { // 外界重新為 fullname 賦值了
const parts = val.split('-')
this.firstname = parts[0] || ''
this.lastname = parts[1] || ''
}
}
}
字串的 split()
方法的使用
小結:
修改前面的firstname和lastname就會呼叫get()方法,修改後面的fullname就會呼叫set()方法
頁面一重新整理就會直接呼叫get()方法
當修改fullname框中的值才會觸發set()方法
來吧展示:
相關文章
- vue例項中watch屬性的使用Vue
- vue中的computed屬性Vue
- vue例項的屬性和方法Vue
- Vue筆記三——計算屬性(computed)Vue筆記
- vue.js計算屬性用法(computed)技巧,依賴其他vue例項的資料Vue.js
- vue 3 學習筆記 (七)——vue3 中 computed 新用法Vue筆記
- Vue學習筆記(六):監視屬性Vue筆記
- Vue.js入門學習 -- 計算屬性Computed( 十一)Vue.js
- Vue原始碼學習(十七):實現computed計算屬性Vue原始碼
- Vue(5)計算屬性computedVue
- vue學習筆記(七)---- vue中的路由Vue筆記路由
- vue學習筆記(一)---- vue指令( v-bind 屬性繫結 )Vue筆記
- Vue.js 的 computed 屬性和 watch 的區別在哪裡?Vue.js
- 前端筆記 - vue2.x計算屬性computed初始化前端筆記Vue
- Vue — vue中帶有$的屬性和方法Vue
- Vue — 計算屬性(computed)詳解Vue
- vue.js計算屬性(computed)Vue.js
- Vue學習筆記之Webpack的使用Vue筆記Web
- vue.js計算屬性用法(computed)Vue.js
- vue計算屬性和vue實力的屬性和方法Vue
- vue 3 學習筆記 (八)——provide 和 inject 用法及原理Vue筆記IDE
- vue入門筆記體系(一)vue例項Vue筆記
- Vue中計算屬性computed與偵聽器watch的區別Vue
- JavaScript中的物件學習筆記(屬性操作)JavaScript物件筆記
- 學習筆記:vue為什麼不能監聽陣列屬性的變化筆記Vue陣列
- 前端【VUE】03-vue【computed 計算屬性】【watch 偵聽器】前端Vue
- vue入門筆記體系(四)computed和watchVue筆記
- Vue學習筆記(2)—— Vue的生命週期Vue筆記
- 端午總結Vue3中computed和watch的使用Vue
- Vue 學習筆記Vue筆記
- vue學習筆記Vue筆記
- Vue 標籤中的ref屬性和refsVue
- vue學習筆記(六) ----- vue元件Vue筆記元件
- vue 基礎入門筆記 19:計算屬性和偵聽屬性Vue筆記
- Vue之computed(計算屬性)詳解get()、set()Vue
- vue3的computed計算屬性返回值註解Vue
- GObject學習筆記(一)類和例項GoObject筆記
- vue2.x版本中computed和watch的使用入門詳解-computed篇Vue