Vue 教程第四篇—— Vue 實例化時基本屬性

實例元素 el

實例元素指的是 Vue 實例化時編譯的容器元素,或者說是 Vue 作用的元素容器

    <div id="app"></div>
    var vm = new Vue({el: '#app'})

也可以為實例元素指定其它選擇器

    <div class="app"></div>
    var vm = new Vue({el: '.app'})

可以有多個實例元素

    <div id="app1"></div><div id="app2"></div>
    var vm = new Vue({el: '#app1'})var vm = new Vue({el: '#app2'})    

如果有多個相同的實例元素則只有第一個起效

    <div id="app"></div><!--這個只當普通 html 輸出,不會被 Vue 編譯--><div id="app"></div>
    var vm = new Vue({el: '#app'})

也可以在實例化的時候不指定實例元素,后面用 $mount() 手動進行掛載

    <div id="app"></div>
    var vm = new Vue({//option})vm.$mount("#app");

可以通過實例獲取實例元素

    var vm = new Vue({el: '#app'})console.log(vm.$el)

數據對象 data

在 MVVM 模式中充當著 M(Model) 數據模型層,更多的體現于將 M 層映射到 V 層

    <div id="app"><!--結果為:文本--><span>{{key1}}</span><!--結果為:11--><span>{{key2 + key3}}</span><!--結果為:key4_1--><span>{{key4.key4_1}}</span><!--結果為:{"key5_1": "key5_1"}--><span>{{JSON.stringify(key5[0])}}</span></div>
    var array = [{key5_1: "key5_1"}];var vm = new Vue({el: '#app',data: {key1: '文本',key2: 1,key3: 10,key4: {key4_1: 'key4_1'},key5: array}}

可以通過實例獲取數據對象

    var vm = new Vue({el: '#app',data: {}})console.log(vm.$data)

事件處理器 methods

元素可以通過 v-on:事件 || @事件 進行綁定事件,事件中的 this 默認指向實例 vm

    <div id="app"><input type="button" @click="count += 1" value="監聽事件"><span>{{count}}</span></div>
    var vm = new Vue({el: '#app',data: {count: 0}})

上面的情況僅適用于很簡單的處理,復雜的處理可以需要單獨處理上面的情況僅適用于很簡單的處理,復雜的處理可以需要單獨處理

    <div id="app"><input type="button" value="確認" @click="counter"/><p>確認按鈕被點擊了 {{ counter }} 次。</p></div>
    var vm = new Vue({el: '#app',data: {count: 0},methods: {counter: function(){this.count += 1;}}})

在 js 的事件中默認會有個 event 對象,Vue 在事件上對 event 對象進行繼承二次封裝,改名為 $event,在事件當中默認傳過去

    <div id="app"><input type="button" @click="eventer" count="1" value="event 對象"><span>{{count}}</span></div>
    var vm = new Vue({el: '#app',data: {count: 0},methods: {eventer: function(event){var _count = event.target.getAttribute('count') * 1;this.count += _count;event.target.setAttribute('count', _count);}}})

在事件中很多情況下要傳參數,Vue 也可以在事件中傳參數

    <div id="app"><input type="button" @click="parameter(10, $event)" value="事件傳參數"><span>{{count}}</span></div>
    var vm = new Vue({el: '#app',data: {count: 0},methods: {parameter: function(n, event){this.count += n;event.target.setAttribute('disabled', true);}}})

事件效果預覽

計算屬性 computed

computed 主要是針對 data 的屬性進行操作,this 的指針默認指向實例 vm

    <p>{{reversedMessage}}</p>
    data: {message: 'ABC'},computed: {reversedMessage: function(){return this.message.split('').reverse().join('')}}

渲染結果為

    <p>CBA</p>

在 computed 的屬性中默認有兩個屬性,一個是 get,我們稱之為 getter,另一個是 set,我們稱之為 setter,所以也可以這樣寫:

    data: {message: 'ABC'},computed: {reversedMessage: {get: function(){return this.message.split('').reverse().join('')}}}

當我們在 V 層調用 {{reversedMessage}} 的時候會自動觸發 reversedMessage.get()

setter 的邏輯也是一樣,當改變對應的屬性時,會自動觸發 set 方法

    <div id="app"><!--調用了 fullName.get()--><p>{{fullName}}</p><input type="text"  v-model="newName"><!--changeName 事件改變了 fullName 的值,所以會自動觸發 fullName.set()--><input type="button" value="changeName" @click="changeName"></div>
    var vm = new Vue({el: '#app',data: {firstName:'DK',lastName: 'Lan',newName: ''},computed: {fullName:{get: function(){return this.firstName + '.' + this.lastName},set: function(newValue){this.firstName = newValue}}},methods: {changeName: function(){this.fullName = this.newName;}}})

Vue 在 getter 上面作了基于對應屬性的依賴緩存,也就是說多次調用同一個屬性,get 只會執行一次。而事件在每次觸發時都會被調用,當然在改變該屬性值的時候會再次被調用

    <div id="app"><!--fullName.get 只被調用一次--><p>{{fullName}}</p><p>{{fullName}}</p><p>{{fullName}}</p><!--每次點擊都會調用 changeName--><input type="button" value="changeName" @click="changeName('Vue')"></div>
    var vm = new Vue({el: '#app',data: {firstName:'DK',lastName: 'Lan',newName: ''},computed: {fullName:{get: function(){return this.firstName + '.' + this.lastName},set: function(newValue){this.firstName = newValue}}},methods: {changeName: function(txt){this.newName = txt;//如果在這里改變 this.fullName 的值,則會再次自動觸發對應的 getter}}})

計算屬性效果預覽

監聽器 watch

Vue 提供了對單個屬性的監聽器,當該屬性發生改變的時候,自動觸發,此項使用不當會影響性能,所以慎用。

    <input type="text" v-model="a"><p>舊值:{{aOldVal}}</p><p>新值:{{aNewVal}}</p>    
    {data: {a: 1},watch: {a: function (newVal, oldVal) {//自動觸發此方法console.log('new: %s, old: %s', newVal, oldVal)},}    }

也可以把方法放到 data 對象中

    {data: {a: 1,changeA: function (newVal, oldVal) {//自動觸發此方法console.log('new: %s, old: %s', newVal, oldVal)}},watch: {a: 'changeA'}    }

watch 與 compute 區別:

  1. computed 創建新的屬性, watch 監聽 data 已有的屬性
  2. compute 會產生依賴緩存
  3. 當 watch 監聽 computed 時,watch 在這種情況下無效,僅會觸發 computed.setter
    {computed: {a: {get: function(){return '';},set: function(newVal){//會觸發此項console.log('set val %s', newVal);}}                 },watch: {a: function(){//不會被觸發console.log('watch');}}    }

監聽器效果預覽

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451961.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451961.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451961.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu將在明年推出平板及手機系統

4月26日下午消息&#xff0c;知名Linux廠商Canonical今天正式發布Ubuntu 12.04版開源操作系統。Ubuntu中國首席代表于立強透露&#xff0c;針對平板電腦的Ubuntu操作系統將在明年推出。 Ubuntu 12.04版開源操作系統發布 Ubuntu操作系統是一款開源操作系統&#xff0c;主要與OE…

scrapy框架異常--no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates)

解決方法&#xff1a; https://blog.csdn.net/qq_40176258/article/details/86527568 https://blog.csdn.net/weixin_39946931/article/details/88390797 謝謝博主分享&#xff01;

【BZOJ3590】[Snoi2013]Quare 狀壓DP

題解&#xff1a; 一道比較水的題 但這個測試數據極弱我也不知道我的代碼正確性是不是有保證 構成一個邊雙聯通 可以由兩個有一個公共點的邊雙聯通或者一個邊雙加一條鏈構成 所以我們需要要預處理出所有環 令f[i][j][k]表示起點為i&#xff0c;終點為j&#xff0c;經過點的狀態…

java swing簡介

UI 組件簡介 在開始學習 Swing 之前&#xff0c;必須回答針對真正初學者的一個問題&#xff1a;什么是 UI&#xff1f;初學者的答案是“用戶界面”。但是因為本教程的目標是要保證您不再只是個初學者&#xff0c;所以我們需要比這個定義更高級的定義。 所以&#xff0c;我再次…

定時任務 cron 表達式詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 &#xff08;Spring定時任務的幾種實現&#xff1a;見博客另一頁&#xff1a;http://blog.csdn.net/jiangyu1013/article/details/54405…

Android Studio 超級簡單的打包生成apk

為什么要打包&#xff1a; apk文件就是一個包&#xff0c;打包就是要生成apk文件&#xff0c;有了apk別人才能安裝使用。打包分debug版和release包&#xff0c;通常所說的打包指生成release版的apk&#xff0c;release版的apk會比debug版的小&#xff0c;release版的還會進行混…

推薦16款最棒的Visual Studio插件

Visual Studio是微軟公司推出的開發環境&#xff0c;Visual Studio可以用來創建Windows平臺下的Windows應用程序和網絡應用程序&#xff0c;也可以用來創建網絡服務、智能設備應用程序和Office插件。 本文介紹16款最棒的Visual Studio擴展&#xff1a; 1. DevColor Extension…

網絡爬蟲--22.【CrawlSpider實戰】實現微信小程序社區爬蟲

文章目錄一. CrawlSpider二. CrawlSpider案例1. 目錄結構2. wxapp_spider.py3. items.py4. pipelines.py5. settings.py6. start.py三. 重點總結一. CrawlSpider 現實情況下&#xff0c;我們需要對滿足某個特定條件的url進行爬取&#xff0c;這時候就可以通過CrawlSpider完成。…

可以生成自動文檔的注釋

使用/**和*/可以用來自動的生成文檔。 這種注釋以/**開頭&#xff0c;以*/結尾

怎么安裝Scrapy框架以及安裝時出現的一系列錯誤(win7 64位 python3 pycharm)

因為要學習爬蟲&#xff0c;就打算安裝Scrapy框架&#xff0c;以下是我安裝該模塊的步驟&#xff0c;適合于剛入門的小白&#xff1a; 一、打開pycharm&#xff0c;依次點擊File---->setting---->Project----->Project Interpreter&#xff0c;打開后&#xff0c;可以…

illegal to have multiple occurrences of contentType with different values 解決

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 在網上查到說是&#xff1a;“包含頁面與被包含頁面的page指令里面的contentType不一致&#xff0c;仔細檢查兩個文件第一行的 page....…

xpath-helper: 谷歌瀏覽器安裝xpath helper 插件

1.下載文件xpath-helper.crx xpath鏈接&#xff1a;https://pan.baidu.com/s/1dFgzBSd 密碼&#xff1a;zwvb&#xff0c;感謝這位網友&#xff0c;我從這拿到了 2.在Google瀏覽器里邊找到這個“擴展程序”選項菜單即可。 3.然后就會進入到擴展插件的界面了,把下載好的離線插件…

網絡爬蟲--23.動態網頁數據抓取

文章目錄一. Ajax二. 獲取Ajax數據的方式三. seleniumchromedriver獲取動態數據四. selenium基本操作一. Ajax 二. 獲取Ajax數據的方式 三. seleniumchromedriver獲取動態數據 selenium文檔&#xff1a;https://selenium-python.readthedocs.io/installation.html 四. sele…

視音頻編解碼技術及其實現

核心提示&#xff1a;一、視音頻編碼國際標準化組織及其壓縮標準介紹 國際上有兩個負責視音頻編碼的標準化組織&#xff0c;一個是VCEG&#xff08;VideocodeExpertGroup&#xff09;&#xff0c;是國際電信聯合會下的視頻編碼專家組&#xff0c;一個是MPEG&#xff08;MotionP…

什么是NaN

NaN&#xff0c;是Not a Number的縮寫。NaN 用于處理計算中出現的錯誤情況&#xff0c;比如 0.0 除以 0.0 或者求負數的平方根。由上面的表中可以看出&#xff0c;對于單精度浮點數&#xff0c;NaN 表示為指數為 emax 1 128&#xff08;指數域全為 1&#xff09;&#xff0c;…

排序系列【比較排序系列之】直接插入排序

最近在和小伙伴們一起研究排序&#xff0c;排序分好多總&#xff0c;后期會做整體總結&#xff0c;本篇則主要對插入排序進行一個整理。 插入排序&#xff08;insert sorting&#xff09;的算法思想十分簡單&#xff0c;就是對待排序的記錄逐個進行處理&#xff0c;每個新紀錄…

Mysql 無法插入中文,中文亂碼解決

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 在計算機中搜索 my.ini文件 找到后打開 &#xff0c;并找到這2行作 如下設置 &#xff1a; default-character-setutf8character-se…

gcc g++安裝

2019獨角獸企業重金招聘Python工程師標準>>> 安裝之前要卸載掉老版本的gcc、g sudo apt-get remove gccgcc-xx #可能有多個版本&#xff0c;都要刪掉 sudo apt-get remove g sudo apt-get install gcc 安裝g編譯器&#xff0c;可以通過命令 sudo apt-get installb…

網絡爬蟲--24.【selenium實戰】實現拉勾網爬蟲之--分析接口獲取數據

文章目錄一. 思路概述二. 分析數據接口三. 詳細代碼一. 思路概述 1.拉勾網采用Ajax技術&#xff0c;加載網頁時會向后端發送Ajax異步請求&#xff0c;因此首先找到數據接口&#xff1b; 2.后端會返回json的數據&#xff0c;分析數據&#xff0c;找到單個招聘對應的positionId…