在web開發(fā)過程中,數(shù)據(jù)查詢是很常見的需求,Vue也可以很方便的進(jìn)行數(shù)據(jù)的查詢操作。Vue提供了computed這個(gè)屬性,可以用來實(shí)現(xiàn)數(shù)據(jù)的計(jì)算或過濾。當(dāng)有多個(gè)數(shù)據(jù)需要計(jì)算或過濾時(shí),我們可以借助computed方法,通過一個(gè)方法返回需要計(jì)算或過濾的數(shù)據(jù)。
例: //html
- {{item}}
上述例子中,我們在input中使用v-model指令實(shí)現(xiàn)了數(shù)據(jù)的雙向綁定,當(dāng)在input中輸入內(nèi)容時(shí),Vue會(huì)自動(dòng)更新search的值。在computed中,我們通過使用filter方法從list中過濾需要顯示的元素。
Vue還提供了watch的方法,實(shí)現(xiàn)監(jiān)聽數(shù)據(jù)變化而觸發(fā)的操作。我們可以監(jiān)聽某一數(shù)據(jù)的變化,當(dāng)該數(shù)據(jù)發(fā)生變化時(shí),觸發(fā)相應(yīng)的操作。
例: //html//js data: { article: 'Vue is a progressive framework for building user interfaces.', wordCount: 0 }, watch: { article: function (val) { this.wordCount = val.length } }article: {{article}}
word count: {{wordCount}}
在上述例子中,我們對article進(jìn)行監(jiān)聽,當(dāng)article發(fā)生變化時(shí),watch方法觸發(fā),相應(yīng)地將article中字符串的長度賦值給wordCount。
除此之外,Vue還提供了computed和watch一起使用的能力。可以在computed中計(jì)算數(shù)據(jù),同時(shí)通過watch監(jiān)聽computed的變化實(shí)現(xiàn)相應(yīng)的操作。
例: //html//js data: { articles: [ 'Vue is a progressive framework for building user interfaces.', 'Node.js is a JavaScript runtime built on Chrome\'s V8 JavaScript engine.', 'Express is a minimal and flexible Node.js web application framework.' ], filterKey: '' }, computed: { filteredArticles: function () { var self = this; return this.articles.filter(function(article){ return article.toLowerCase().indexOf(self.filterKey.toLowerCase()) >-1; }); }, articleLength: function () { return this.filteredArticles.length; } }, watch: { filteredArticles: function () { console.log(this.filteredArticles) } }articles length: {{articleLength}}
在上述例子中,我們定義了computed方法filteredArticles來過濾articles數(shù)組中的元素。同時(shí),我們在computed中又定義了articleLength方法,通過filteredArticles計(jì)算返回長度。在watch中,我們對filteredArticles進(jìn)行了監(jiān)聽,當(dāng)filteredArticles數(shù)組發(fā)生變化時(shí),在控制臺輸出該數(shù)組。
綜上所述,Vue提供了非常方便的計(jì)算和監(jiān)聽數(shù)據(jù)變化的方法,可以像實(shí)現(xiàn)頁面渲染一樣簡單地進(jìn)行查詢操作。