亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Vue.js中關于偵聽器(watch)的高級用法示例

2019-11-19 13:55:54
字體:
來源:轉載
供稿:網友

Vue偵聽器watch

雖然計算屬性在大多數情況下更合適,但有時也需要一個自定義的偵聽器。這就是為什么 Vue 通過 watch 選項提供了一個更通用的方法,來響應數據的變化。當需要在數據變化時執行異步或開銷較大的操作時,這個方式是最有用的。例如:

<div id="watch-example"><p>Ask a yes/no question:<input v-model="question"></p><p>{{ answer }}</p></div>
<!-- 因為 AJAX 庫和通用工具的生態已經相當豐富,Vue 核心代碼沒有重復 --><!-- 提供這些功能以保持精簡。這也可以讓你自由選擇自己更熟悉的工具。 --><script src="https://cdn.jsdelivr.net/npm/axios@0.12.0/dist/axios.min.js"></script><script src="https://cdn.jsdelivr.net/npm/lodash@4.13.1/lodash.min.js"></script><script>var watchExampleVM = new Vue({el: '#watch-example',data: {question: '',answer: 'I cannot give you an answer until you ask a question!'},watch: {// 如果 `question` 發生改變,這個函數就會運行question: function (newQuestion, oldQuestion) {this.answer = 'Waiting for you to stop typing...'this.getAnswer()}},methods: {// `_.debounce` 是一個通過 Lodash 限制操作頻率的函數。// 在這個例子中,我們希望限制訪問 yesno.wtf/api 的頻率// AJAX 請求直到用戶輸入完畢才會發出。想要了解更多關于// `_.debounce` 函數 (及其近親 `_.throttle`) 的知識,// 請參考:https://lodash.com/docs#debouncegetAnswer: _.debounce(function () {if (this.question.indexOf('?') === -1) {this.answer = 'Questions usually contain a question mark. ;-)'return}this.answer = 'Thinking...'var vm = this // this重定向axios.get('https://yesno.wtf/api').then(function (response) {vm.answer = _.capitalize(response.data.answer)}).catch(function (error) {vm.answer = 'Error! Could not reach the API. ' + error})},// 這是我們為判定用戶停止輸入等待的毫秒數500)}})</script>

偵聽器(watch)的高級用法

假設有如下代碼:

<div>  <p>FullName: {{fullName}}</p>  <p>FirstName: <input type="text" v-model="firstName"></p></div>new Vue({ el: '#root', data: { firstName: 'Dawei', lastName: 'Lou', fullName: '' }, watch: { firstName(newName, oldName) {  this.fullName = newName + ' ' + this.lastName; } } })

上面的代碼的效果是,當我們輸入firstName后,wacth監聽每次修改變化的新值,然后計算輸出fullName。

handler方法和immediate屬性

這里 watch 的一個特點是,最初綁定的時候是不會執行的,要等到 firstName 改變時才執行監聽計算。那我們想要一開始就讓他最初綁定的時候就執行改怎么辦呢?我們需要修改一下我們的 watch 寫法,修改過后的 watch 代碼如下:

watch: { firstName: { handler(newName, oldName) {  this.fullName = newName + ' ' + this.lastName; }, // 代表在wacth里聲明了firstName這個方法之后立即先去執行handler方法 immediate: true }}

注意到handler了嗎,我們給 firstName 綁定了一個handler方法,之前我們寫的 watch 方法其實默認寫的就是這個handler,Vue.js會去處理這個邏輯,最終編譯出來其實就是這個handler。

而immediate:true代表如果在 wacth 里聲明了 firstName 之后,就會立即先去執行里面的handler方法,如果為 false就跟我們以前的效果一樣,不會在綁定的時候就執行。

deep屬性

watch 里面還有一個屬性 deep,默認值是 false,代表是否深度監聽,比如我們 data 里有一個obj屬性:

<div>  <p>obj.a: {{obj.a}}</p>  <p>obj.a: <input type="text" v-model="obj.a"></p></div>new Vue({ el: '#root', data: { obj: {  a: 123 } }, watch: { obj: {  handler(newName, oldName) {   console.log('obj.a changed');  },  immediate: true } } })

當我們在在輸入框中輸入數據視圖改變obj.a的值時,我們發現是無效的。受現代 JavaScript 的限制 (以及廢棄 Object.observe),Vue 不能檢測到對象屬性的添加或刪除。由于 Vue 會在初始化實例時對屬性執行 getter/setter 轉化過程,所以屬性必須在 data 對象上存在才能讓 Vue 轉換它,這樣才能讓它是響應的。

默認情況下 handler 只監聽obj這個屬性它的引用的變化,我們只有給obj賦值的時候它才會監聽到,比如我們在 mounted事件鉤子函數中對obj進行重新賦值:

mounted: { this.obj = { a: '456' }}

這樣我們的 handler 才會執行,打印obj.a changed。

相反,如果我們需要監聽obj里的屬性a的值呢?這時候deep屬性就派上用場了!

watch: { obj: { handler(newName, oldName) {  console.log('obj.a changed'); }, immediate: true, deep: true }}

deep的意思就是深入觀察,監聽器會一層層的往下遍歷,給對象的所有屬性都加上這個監聽器,但是這樣性能開銷就會非常大了,任何修改obj里面任何一個屬性都會觸發這個監聽器里的 handler。

優化,我們可以是使用字符串形式監聽。

watch: { 'obj.a': { handler(newName, oldName) {  console.log('obj.a changed'); }, immediate: true, // deep: true }}

這樣Vue.js才會一層一層解析下去,直到遇到屬性a,然后才給a設置監聽函數。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕日韩精品有码视频| 一本色道久久综合亚洲精品小说| 91免费的视频在线播放| 亚洲第一视频网站| 亚洲成人久久网| 一区二区av在线| 揄拍成人国产精品视频| 91成人在线观看国产| 色777狠狠综合秋免鲁丝| 日韩免费av一区二区| 欧美韩国理论所午夜片917电影| 国产日韩中文字幕在线| 亚洲最大的成人网| 国产精品日日做人人爱| 欧美日韩在线视频一区| 亚洲欧美在线一区| 国产亚洲日本欧美韩国| 亚洲国产第一页| 不卡毛片在线看| 国产精品劲爆视频| 亚洲另类欧美自拍| 成人精品久久av网站| 97国产精品久久| 这里只有精品视频在线| 国产男人精品视频| 久久香蕉国产线看观看av| 欧美人与性动交a欧美精品| 欧美日韩一区免费| 91大神福利视频在线| 日韩精品999| 亚洲在线www| 欧美日韩国产中文字幕| 欧美日韩xxx| 最好看的2019的中文字幕视频| 97超碰国产精品女人人人爽| 国产精品日本精品| 这里只有精品视频| 中文字幕亚洲色图| 欧美精品videosex性欧美| 亚洲字幕在线观看| 亚洲精品乱码久久久久久按摩观| 日韩中文字幕国产| 国产精品久久久久aaaa九色| 欧洲精品在线视频| 8050国产精品久久久久久| 久久免费国产精品1| 日韩精品免费观看| 亚洲一级片在线看| 久久久久免费视频| 97人洗澡人人免费公开视频碰碰碰| 国产在线98福利播放视频| 国产精品久久久久久久久久三级| 伊人久久大香线蕉av一区二区| 日韩中文字幕在线视频播放| 欧美美最猛性xxxxxx| 91精品国产自产在线| 色综合久久88色综合天天看泰| 久久精品久久精品亚洲人| 亚洲欧美国产一区二区三区| 欧美成人精品三级在线观看| 日韩av电影手机在线| 欧美一级淫片丝袜脚交| 久久在线精品视频| 性色av一区二区三区在线观看| 久久久影视精品| 亚洲a在线观看| 96sao精品视频在线观看| 久久久久久久久亚洲| 成人做爰www免费看视频网站| 中文字幕精品www乱入免费视频| 久久久久中文字幕| 国产精品主播视频| 精品久久久一区二区| 亚洲国产精彩中文乱码av在线播放| 久久成人av网站| 日韩成人久久久| 2018国产精品视频| 一本色道久久88综合日韩精品| 欧美激情视频一区二区三区不卡| 久久九九热免费视频| 国产精品老牛影院在线观看| 日韩在线免费视频| 色诱女教师一区二区三区| 国产精品99久久久久久www| 国产日本欧美一区二区三区| 欧美最猛性xxxxx免费| 日韩有码在线视频| 国产精品久久久久久久久借妻| 日韩欧美国产免费播放| 欧美成aaa人片在线观看蜜臀| 国产在线观看一区二区三区| 日韩国产欧美精品在线| 日本一区二区三区在线播放| 亚洲精品福利在线| 亚洲第一精品福利| 欧美日韩中文字幕| 国产精品久久久久影院日本| 555www成人网| 色婷婷成人综合| 92国产精品久久久久首页| 国产精品亚洲综合天堂夜夜| 91精品国产精品| 麻豆乱码国产一区二区三区| 在线国产精品视频| 欧美国产日韩二区| 中文字幕日韩av电影| 日韩精品在线观看一区二区| 91久久精品美女| 欧美成人免费va影院高清| 91国在线精品国内播放| 久久噜噜噜精品国产亚洲综合| 欧美亚洲日本黄色| 国产精品日韩av| 欧美裸体xxxx极品少妇软件| 欧美精品在线免费| 亲爱的老师9免费观看全集电视剧| 91久久中文字幕| 欧美精品手机在线| 精品欧美aⅴ在线网站| 亚洲美女在线视频| 国产精品com| 亚洲最大的网站| 亚洲精品动漫久久久久| 色老头一区二区三区在线观看| 日韩在线观看成人| 91中文在线视频| 国产精品青草久久久久福利99| 欧美国产视频日韩| 黄色成人在线免费| 亚洲成人黄色在线| 国产精品黄视频| 亚洲天堂av在线播放| 国内免费久久久久久久久久久| 在线激情影院一区| 欧美丰满少妇xxxx| 国产精品久久二区| 欧美日韩成人精品| 国产精品白嫩美女在线观看| 97超级碰碰人国产在线观看| 亚洲精品国产美女| 亚洲理论片在线观看| 国产乱人伦真实精品视频| 久久综合伊人77777蜜臀| 亚洲国产精品小视频| 日韩视频在线免费| 亚洲精品www久久久久久广东| 日本国产高清不卡| 日本成人激情视频| 国产精品久久国产精品99gif| 日韩最新免费不卡| 国产精品久久中文| 欧美风情在线观看| 91成人天堂久久成人| 久久九九免费视频| 欧美黄色三级网站| 一本一本久久a久久精品牛牛影视| 96pao国产成视频永久免费| 日本精品免费一区二区三区| 欧美黑人狂野猛交老妇| 成人免费在线视频网址| 久久国产精品影片| 日韩免费视频在线观看| 爱福利视频一区| 久久91亚洲精品中文字幕奶水|