Vue 筆記11.22 Vue的響應(yīng)式原理、Vue的常用指令帽芽、條件渲染和列表渲染删掀、輪播圖練習(xí)

課堂學(xué)習(xí):Vue 漸進(jìn)式 JavaScript框架 初步認(rèn)識(shí)

下面是Vue的官方文檔 不懂就看看

https://cn.vuejs.org/? ??

一、安裝和使用

1.安裝:

在? ?https://cn.vuejs.org/? ?中 找到學(xué)習(xí)——教程——安裝?

里面有兩個(gè)版本的Vue

開發(fā)版本和生產(chǎn)版本

開發(fā)版本:包含完整的警告和調(diào)試模式

生產(chǎn)版本:刪除了警告导街,33.46KB min+gzip? ? 是開發(fā)版本的壓縮版體積更小

下載好后直接放到vscode打開的文件的同一目錄下 是Vue.js?

2.使用:

使用Vue框架 需要先引入

?<!--?引入vue.js文件?開發(fā)版本和生產(chǎn)版本?后者更小-->

????<script?src='../js/vue.js'></script>

????<!--?生產(chǎn)版本?-->

????<!--?<script?src='../js/vue.js'></script>?-->

以下代碼可以關(guān)閉生產(chǎn)提示

<script>

//關(guān)閉生產(chǎn)提示?

????????Vue.config.productionTip?=?false

</script>

第一步:

<!--?第一步:準(zhǔn)備一個(gè)容器?-->

????<div?id="app">

????????<h2>姓名:{{name}}</h2>

????????<h2>年齡:{{age}}</h2>

????????<!--?v-on:?指令用于綁定事件?-->

????????<button?v-on:click='updataName()'>修改姓名</button>

????????<button?v-on:click='updataAge'>修改年齡</button>

????</div>

第二步:

//?第二步:創(chuàng)建一個(gè)Vue對(duì)象

????????let?vm?=?new?Vue({

????????????//?綁定當(dāng)前Vue對(duì)象操作的DOM容器

????????????el:'#app',

????????????//定義當(dāng)前Vue對(duì)象管理的數(shù)據(jù)

????????????data:{

????????????????name:'張三',

????????????????age:20

????????????},

????????????//定義當(dāng)前Vue對(duì)象管理的方法

????????????methods:{

????????????????//修改姓名的方法

????????????????updataName?(){

????????????????????this.name='啊發(fā)發(fā)'

????????????????},

????????????????//修改年齡的方法

????????????????updataAge?(){

????????????????????this.age=30

????????????????}

????????????}

二披泪、理解什么是Vue的響應(yīng)式原理:

原理:當(dāng)代理對(duì)象監(jiān)聽到數(shù)據(jù)發(fā)生變化了,就會(huì)重新渲染頁(yè)面?

以下代碼用于幫助理解 復(fù)制到vscode中看比較好

<script?src='../js/vue.js'></script>

????<script>

????????Vue.config.productionTip?=?false

????????//?一搬瑰、理解什么是代理對(duì)象

????????//1.定義源對(duì)象

????????let?obj1?=?{

????????????name:?'張三',

????????????age:?20

????????}

????????//2.定義代理對(duì)象

????????let?obj2?=?obj1

????????console.log('obj2:',?obj2)

????????//代理對(duì)象修改了源對(duì)象的數(shù)據(jù)

????????obj2.name?=?'李四'

????????obj2.age?=?30


????????console.log('obj1:',?obj1)

????????console.log('obj2:',?obj2)

????????console.log('-----------------------')

????????//二款票、看一下Vue是如何使用代理對(duì)象

????????//1.定義一份數(shù)據(jù)

????????let?myData?=?{

????????????name:?'張三',

????????????age:?20

????????}

????????let?vm?=?new?Vue({

????????????//2.將一份數(shù)據(jù)傳遞給Vue的data選項(xiàng),他背后做了兩件事情

????????????//(1)泽论、設(shè)置Vue實(shí)例的_data屬性作為當(dāng)前數(shù)據(jù)的代理對(duì)象?(響應(yīng)式的核心)

????????????//(2)艾少、將_data里面代理的所有數(shù)據(jù)再添加給當(dāng)前Vue實(shí)例?(為了Vue實(shí)例方便調(diào)用數(shù)據(jù))

????????????data:?myData

????????})

????????vm.name?=?'李四'

????????vm.age?=?30

????????console.log(myData)

????????console.log(vm)

????????console.log('-----------------------')

????????//三、給對(duì)象添加屬性的方法

????????let?obj3?=?{}

????????//方法一:

????????obj3.name?=?'斯班奇'

????????//方法二:

????????obj3['age']?=?8

????????//方法三:通過Object對(duì)象的defineProperty方法翼悴,給指定的對(duì)象添加指定的屬性

????????//使用這種方式給對(duì)象添加的屬性?默認(rèn)不可枚舉?默認(rèn)不可刪除

????????//使用這種方式缚够,給對(duì)象添加的屬性,對(duì)屬性的保護(hù)措施更加嚴(yán)格

????????Object.defineProperty(obj3,?'sex',?{

????????????//屬性值

????????????value:?'男',

????????????//允許被枚舉(默認(rèn)不允許)

????????????enumerable:?true,

????????????//允許被刪除(默認(rèn)不允許)

????????????configurable:?true

????????})

????????console.log(obj3)

????????//枚舉的方法?枚舉出對(duì)象的所有屬性(其實(shí)就是遍歷出對(duì)象的所有屬性名稱)

????????for?(let?key?in?obj3)?{

????????????console.log(key)?//?name?age?無(wú)法枚舉出sex

????????}

????????//通過delete關(guān)鍵字鹦赎,可以刪除對(duì)象上的指定屬性

????????delete?obj3.name

????????//通過Object.defineProperty方法添加的屬性不可刪除

????????delete?obj3.sex

????????console.log(obj3)??//{age:?8,?sex:?'男'}

????????console.log('-------------------------------')

????????//四谍椅、Vue響應(yīng)式的原理

????????//?原理:當(dāng)代理對(duì)象監(jiān)聽到數(shù)據(jù)發(fā)生變化了,就會(huì)重新渲染頁(yè)面?以下代碼用于解釋如何做到的

????????//1.定義一個(gè)源對(duì)象

????????let?data?=?{

????????????name:?'張三',

????????????age:?20

????????}

????????//在頁(yè)面中古话,顯示姓名和年齡

????????document.querySelector('#name').innerHTML?=?data.name

????????document.querySelector('#age').innerHTML?=?data.age

????????//2.定義一個(gè)代理對(duì)象(使用_data?去代理data)

????????let?_data?=?{}

????????//3.使用Object.defineProperty給代理對(duì)象添加屬性

????????Object.defineProperty(_data,?'name',?{

????????????//get方法雏吭,用于返回屬性的值(當(dāng)我們調(diào)用name屬性獲取值時(shí),會(huì)調(diào)用get方法)

????????????//在調(diào)用get方法時(shí)才知道里面的值是什么

????????????get()?{

????????????????//console.log('get方法執(zhí)行了')

????????????????return?data.name

????????????},

????????????//set方法陪踩,用于設(shè)置屬性的值(當(dāng)我們調(diào)用name屬性設(shè)置值時(shí)杖们,會(huì)調(diào)用set方法)

????????????//一旦重新設(shè)置_data.name的值時(shí)?調(diào)用這個(gè)函數(shù)?設(shè)定的值會(huì)作為參數(shù)val傳入set方法

????????????set(val)?{

????????????????//?console.log('set方法執(zhí)行了')

????????????????data.name?=?val

????????????????//當(dāng)代理對(duì)象監(jiān)聽到數(shù)據(jù)發(fā)生變化了,就會(huì)重新渲染頁(yè)面

????????????????document.querySelector('#name').innerHTML?=?data.name

????????????}

????????}),


????????Object.defineProperty(_data,?'age',?{

????????????get()?{

????????????????return?data.age

????????????},

????????????set(val)?{

????????????????data.age?=?val

????????????????//當(dāng)代理對(duì)象監(jiān)聽到數(shù)據(jù)發(fā)生變化了膊毁,就會(huì)重新渲染頁(yè)面

????????????????document.querySelector('#age').innerHTML?=?data.age

????????????}

????????})

????????console.log(_data.name)?//張三

????????console.log(_data.age)??//20

????????_data.name?=?'啦啦啦'

????????_data.age?=?40

????</script>

三胀莹、Vue的常用指令:

<!--?v-bind:?用于綁定屬性,通過v-bind:?綁定過的屬性婚温,可以在屬性值里寫表達(dá)式?(表達(dá)式可以是Vue的數(shù)據(jù))-->

? ? ? ? ? ?舉個(gè)例子v-bind:value = '1+2' 它顯示出來(lái)的是3?

? ? ? ? ? ? <!--?v-on:?用于綁定事件描焰,通過v-on:綁定過的事件,可以指定Vue實(shí)例定義的方法?-->

????????????<input?type="text"?v-bind:value='name'?v-on:input='updataName'>{{name}}


<!--?v-bind:?可以用:簡(jiǎn)寫?-->

????????????<!--?v-on:?可以用@簡(jiǎn)寫?-->

????????????<!--?如果事件方法不是很多栅螟,可以卸載行內(nèi)荆秦,注意:這里不能用this?$event是事件對(duì)象就是?e?在行內(nèi)就叫$event-->

????????????<input?type="text"?:value?=?'age'?@input='age?=?$event.target.value'>{{age}}


<!--?通過v-model:?指令可以實(shí)現(xiàn)數(shù)據(jù)的雙向綁定,

????????????v-model:?指令是v-on:input?和?v-bind: value的簡(jiǎn)寫-->

????????????<input?type="text"?v-model='job'>{{job}}



let?vm?=?new?Vue({

????????????el:?'#app',

????????????//數(shù)據(jù)

????????????data:?{

????????????????name:?'張三',

????????????????age:?20,

????????????????job:?'程序員'

????????????},

????????????methods:?{

????????????????updataName(e)?{

????????????????????console.log(e)?//接收的事件對(duì)象e里面有target屬性?里面有value?

????????????????????//獲取文本框里的內(nèi)容力图,更新數(shù)據(jù)??把name屬性的值同步給當(dāng)前input里的value

????????????????????this.name?=?e.target.value??//獲取當(dāng)前元素的value值

????????????????},

????????????????updataAge(e)?{

????????????????????this.age?=?e.target.value

????????????????},

????????????????updataJob(e){

????????????????????this.job?=?e.target.value

????????????????}

????????????}

????????})


四步绸、條件渲染和列表渲染:

1.條件渲染

v-if=''

v-else-if=''

v-else='

<!--?根據(jù)成績(jī)? ? 'score'? ?,顯示下面的等級(jí)?--> 這個(gè)score是在? ?Vue? 的? ?data? 中我們定義的屬性 根據(jù)這個(gè)屬性我們?cè)O(shè)定的值是多少來(lái)判斷顯示 優(yōu)秀 良好 中等 合格 不合格中的一項(xiàng)

????????<h2?v-if='score>=90'>優(yōu)秀</h2>

????????<h2?v-else-if='score>=80'>良好</h2>

????????<h2?v-else-if='score>=70'>中等</h2>

????????<h2?v-else-if='score>=60'>合格</h2>

????????<h2?v-else>不合格</h2>


v-show 的值時(shí)布爾值 來(lái)判斷是否顯示和不顯示?

v-show的方法? 模板已經(jīng)渲染成功吃媒,通過樣式控制隱藏

v-if的方法 在滿足條件是才會(huì)渲染頁(yè)面 不滿足的不會(huì)渲染


v-if?和?v-show?如何選擇

????????????如果頁(yè)面需要反復(fù)切換顯示和隱藏瓤介,用v-show吕喘。

????????????如果頁(yè)面中有很多模塊需要隱藏,用戶可能只對(duì)其中的某個(gè)模塊感興趣刑桑,用v-if氯质,

????????????所有的模塊首屏加載時(shí),全部都不渲染祠斧,當(dāng)用戶選擇指定的模塊后闻察,再渲染指定的模塊。


2.列表渲染:

<ul>

????????????<!--?v-for?指令琢锋,用于列表渲染: 列表渲染時(shí)辕漂,通常都要綁定key,key的作用是提高渲染性能

????????????注意:key必須是唯一吴超,暫時(shí)可以將列表的索引作為key值去使用?-->

????????????<li?v-for?=?'(item,index)?in?foods'?:key='index'>{{index}}---{{item.id}}---{{item.name}}---{{item.price}}</li>

????????????<!--?這里的參數(shù)item?index可以換別的字母?如果只有一個(gè)參數(shù)?就會(huì)顯示item(foods數(shù)組中的每一項(xiàng))?-->

????????????<li?v-for?=?'a?in?foods'?:key='index'>{{a}}</li>

????????</ul>


new?Vue({

????????????el:?'#app',

????????????//定義數(shù)據(jù)

????????????data:?{

????????????????score:?60,

????????????????//添加一個(gè)是否顯示屬性?默認(rèn)為false

????????????????isShow:?false,

????????????????foods:[

????????????????????{

????????????????????????id:1,

????????????????????????name:'薯片',

????????????????????????price:7.9

????????????????????},

????????????????????{

????????????????????????id:2,

????????????????????????name:'餅干',

????????????????????????price:17.9

????????????????????},

????????????????????{

????????????????????????id:3,

????????????????????????name:'巧克力',

????????????????????????price:27.9

????????????????????},

????????????????????{

????????????????????????id:4,

????????????????????????name:'面包',

????????????????????????price:11.9

????????????????????}

????????????????]

????????????}

????????})


五钉嘹、輪播圖練習(xí):

<body>

????<div?id="app">

????????<!--?遍歷imgs??圖片路徑綁定imgs屬性中的item??-->

????????<!--?這樣寫會(huì)把所有圖片加載進(jìn)去?然后通過?display:none?的方法來(lái)顯示?-->

????????<!--?<img?v-for?=?'(item,index)?in?imgs'?:src="item"?v-show?=?'index?===?showActive'>?-->

????????<!--?這樣寫會(huì)依次渲染不同圖片?減小渲染壓力?-->

????????<img?:src="imgs[showActive]"?alt="">

????</div>

????<script?src="../js/vue.js"></script>

????<script>

????????new?Vue({

????????????el:?'#app',

????????????data:?{

????????????????//顯示的下標(biāo):

????????????????showActive:?0,

????????????????//圖片數(shù)組

????????????????imgs:?[

????????????????????'http://p1.music.126.net/7zAkp74zoKd0LuEuEP6dOg==/109951166645160829.jpg?imageView&quality=89',

????????????????????'http://p1.music.126.net/c1olbeIgiVsj9I39fCUXkQ==/109951166644891380.jpg?imageView&quality=89',

????????????????????'http://p1.music.126.net/JMYet32O1mi6-YZ1GGSYcQ==/109951166646419732.jpg?imageView&quality=89',

????????????????????'http://p1.music.126.net/WCX5Cq1z17Du2z0QBEcEaA==/109951166645933077.jpg?imageView&quality=89',

????????????????????'http://p1.music.126.net/2lJxwhKKgzgIHsfiXRJXOQ==/109951166645147845.jpg?imageView&quality=89'

????????????????]

????????????},

????????????//生命周期函數(shù)(表示頁(yè)面掛載完成)

????????????mounted()?{

????????????????setInterval(()?=>?{

????????????????????this.showActive++

????????????????????//如果下標(biāo)越界,重新從0開始

????????????????????if?(this.showActive?>?4)?{

????????????????????????this.showActive?=?0

????????????????????}

????????????????},?1000)

????????????}

????????})

????</script>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烛芬,一起剝皮案震驚了整個(gè)濱河市隧期,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赘娄,老刑警劉巖仆潮,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異遣臼,居然都是意外死亡性置,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門揍堰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鹏浅,“玉大人,你說我怎么就攤上這事屏歹∫遥” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蝙眶,是天一觀的道長(zhǎng)季希。 經(jīng)常有香客問我,道長(zhǎng)幽纷,這世上最難降的妖魔是什么式塌? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮友浸,結(jié)果婚禮上峰尝,老公的妹妹穿的比我還像新娘。我一直安慰自己收恢,他們只是感情好武学,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布祭往。 她就那樣靜靜地躺著,像睡著了一般劳淆。 火紅的嫁衣襯著肌膚如雪链沼。 梳的紋絲不亂的頭發(fā)上默赂,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天沛鸵,我揣著相機(jī)與錄音,去河邊找鬼缆八。 笑死曲掰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奈辰。 我是一名探鬼主播栏妖,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼奖恰!你這毒婦竟也來(lái)了吊趾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瑟啃,失蹤者是張志新(化名)和其女友劉穎论泛,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛹屿,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屁奏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了错负。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坟瓢。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖犹撒,靈堂內(nèi)的尸體忽然破棺而出折联,到底是詐尸還是另有隱情,我是刑警寧澤识颊,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布诚镰,位于F島的核電站,受9級(jí)特大地震影響谊囚,放射性物質(zhì)發(fā)生泄漏怕享。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一镰踏、第九天 我趴在偏房一處隱蔽的房頂上張望函筋。 院中可真熱鬧,春花似錦奠伪、人聲如沸跌帐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谨敛。三九已至究履,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脸狸,已是汗流浹背最仑。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炊甲,地道東北人泥彤。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像卿啡,于是被迫代替她去往敵國(guó)和親吟吝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • ## 框架和庫(kù)的區(qū)別?> 框架(framework):一套完整的軟件設(shè)計(jì)架構(gòu)和**解決方案**颈娜。> > 庫(kù)(lib...
    Rui_bdad閱讀 2,909評(píng)論 1 4
  • 框架和插件 框架不能輕易換剑逃,庫(kù)可以 MVC和MVVM node(后端)中MVC:后端的分層開發(fā)概念 MVVM是前端...
    駱駱呀閱讀 174評(píng)論 0 0
  • vue框架視頻學(xué)習(xí)第一天筆記 webpack編譯 webpack編譯文件基礎(chǔ)插件babel-clibabel-co...
    果木山閱讀 238評(píng)論 0 0
  • 一、概念介紹 Vue.js和React.js分別是目前國(guó)內(nèi)和國(guó)外最火的前端框架官辽,框架跟類庫(kù)/插件不同蛹磺,框架是一套完...
    劉遠(yuǎn)舟閱讀 1,061評(píng)論 0 0
  • jquery介紹 jQuery是目前使用最廣泛的javascript函數(shù)庫(kù) 據(jù)統(tǒng)計(jì),全世界排名前100萬(wàn)的網(wǎng)站野崇,有...
    就是這么帥_567e閱讀 1,147評(píng)論 0 0