<template> <div> <p>FullName: {{person.fullname}}</p> <p>FirstName: <input type="text" v-model="person.firstname"></p> </div> </template>
<script> export default { data(){ return { person: { firstname: 'Menghui', lastname: 'Jin', fullname: '' } } }, watch: { person: { handler(n,o){ this.person.fullname = n.firstname + ' ' + this.person.lastname; }, // immediate: true, //刷新加載 立馬觸發一次handler // deep: true // 能夠深度檢測到 person 對象的屬性值的變化 } } } </script>
結果:
handler 方法就至關於普通偵聽器觸發的事件,從結果能夠看到,組件初始化的時候,偵聽器並無handler方法 因此fullName是沒有值的
當修改以上代碼,加上immediate: true,組件初始化的時候,偵聽器會立馬(immediate)觸發handler方法
結果:
當在輸入框中輸入數據時, 能夠發現fullName的值並無隨之改變vue
結果:ui
這是由於vue沒法檢測到對象內部屬性值的變化 好比person.firstname的變化this
因此此時 須要用到vue的深度監聽(deep) spa
此時加上代碼 deep: truecode
能夠發現 每次輸入框數據變化 fullname隨之改變對象
結果:blog