最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue基礎(chǔ)語法知識(shí)梳理下篇

 更新時(shí)間:2022年12月12日 10:14:46   作者:糖^O^  
這篇文章主要介紹了Vue基礎(chǔ)語法知識(shí)梳理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

計(jì)算屬性

  • 定義:要用的屬性不存在,要通過已有屬性計(jì)算得來
  • 原理:底層借助了Objcet.defineProperty方法提供的getter和setter

get函數(shù)什么時(shí)候執(zhí)行?

(1).初次讀取時(shí)會(huì)執(zhí)行一次

(2).當(dāng)依賴的數(shù)據(jù)發(fā)生改變時(shí)會(huì)被再次調(diào)用

注:

  • 計(jì)算屬性最終會(huì)出現(xiàn)在vm上,直接讀取使用即可
  • 如果計(jì)算屬性要被修改,那必須寫set函數(shù)去響應(yīng)修改,且set中要引起計(jì)算時(shí)依賴的數(shù)據(jù)發(fā)生改變
計(jì)算屬性完整版寫法
<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
    姓:<input type="text" v-model="firstName">
    名:<input type="text" v-model="lastName"> 
    全名:<span>{{fullName}}</span>
</div>
<script>
	const vm = new Vue({
        el:'#root',
        data:{
            firstName:'張',
            lastName:'三',
        }
        computed:{
            fullName:{
                //get有什么作用?當(dāng)有人讀取fullName時(shí),get就會(huì)被調(diào)用,且返回值就作為fullName的值
                //get什么時(shí)候調(diào)用?1.初次讀取fullName時(shí)。2.所依賴的數(shù)據(jù)發(fā)生變化時(shí)。
                get(){
                    console.log('get被調(diào)用了')
                    return this.firstName + '-' + this.lastName
                },
                //set什么時(shí)候調(diào)用? 當(dāng)fullName被修改時(shí)。
                // 可以主動(dòng)在控制臺(tái)修改fullName來查看情況
                set(value){
                    console.log('set',value)
                    const arr = value.split('-')
                    this.firstName = arr[0]
                    this.lastName = arr[1]
                }
            }
        }
    })
</script>

鍵盤事件

鍵盤事件語法:@keydown,@keyup

Vue中常用的按鍵別名: 

回車enter
刪除delete (捕獲“刪除”和“退格”鍵)
退出esc
換行tab (特殊,必須配合keydown去使用)
空格space
up
down
left
right

Vue未提供別名的按鍵,可以使用按鍵原始的key值去綁定,但注意要轉(zhuǎn)為kebab-case(短橫線命名)

系統(tǒng)修飾鍵(用法特殊):ctrl、alt、shift、meta

  • 配合keyup使用:按下修飾鍵的同時(shí),再按下其他鍵,隨后釋放其他鍵,事件才被觸發(fā)。
  • 配合keydown使用:正常觸發(fā)事件。

也可以使用keyCode去指定具體的按鍵(不推薦)

Vue.config.keyCodes.自定義鍵名 = 鍵碼,可以去定制按鍵別名

監(jiān)視屬性

監(jiān)視屬性watch:

當(dāng)被監(jiān)視的屬性變化時(shí), 回調(diào)函數(shù)自動(dòng)調(diào)用

監(jiān)視的屬性必須存在,才能進(jìn)行監(jiān)視

監(jiān)視的兩種寫法:

(1).new Vue時(shí)傳入watch配置

(2).通過vm.$watch監(jiān)視

<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
    <h2>今天天氣很{{ info }}</h2>
    <button @click="changeWeather">切換天氣</button>
</div>
<script>
	const vm = new Vue({
        el:'#root',
        data:{
            isHot:true,
        },
        computed:{
            info(){
                return this.isHot ? '炎熱' : '涼爽'
            }
        },
        methods: {
            changeWeather(){
                this.isHot = !this.isHot
            }
        },
        watch:{
            isHot:{
                immediate: true, // 初始化時(shí)讓handler調(diào)用一下
                // handler什么時(shí)候調(diào)用?當(dāng)isHot發(fā)生改變時(shí)。
                handler(newValue, oldValue){
                    console.log('isHot被修改了',newValue,oldValue)
                }
            }
        } 
    })
</script>

深度監(jiān)視:

(1).Vue中的watch默認(rèn)不監(jiān)測(cè)對(duì)象內(nèi)部值的改變(一層)

(2).配置deep:true可以監(jiān)測(cè)對(duì)象內(nèi)部值改變(多層)

備注:

Vue自身可以監(jiān)測(cè)對(duì)象內(nèi)部值的改變,但Vue提供的watch默認(rèn)不可以

使用watch時(shí)根據(jù)數(shù)據(jù)的具體結(jié)構(gòu),決定是否采用深度監(jiān)視

<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
    {{numbers.c.d.e}}
</div>
<script type="text/javascript">
    Vue.config.productionTip = false 
    const vm = new Vue({
        el:'#root',
        data:{
            numbers:{
                c:{
                    d:{
                        e:100
                    }
                }
            }
        },
        watch:{
            //監(jiān)視多級(jí)結(jié)構(gòu)中某個(gè)屬性的變化
            /* 'numbers.a':{
					handler(){
						console.log('a被改變了')
					}
				} */
            //監(jiān)視多級(jí)結(jié)構(gòu)中所有屬性的變化
            numbers:{
                deep:true,
                handler(){
                    console.log('numbers改變了')
                }
            }
        }
    });
</script>

computed和watch之間的區(qū)別:

  • computed能完成的功能,watch都可以完成
  • watch能完成的功能,computed不一定能完成,例如:watch可以進(jìn)行異步操作

兩個(gè)重要的小原則:

1.所被Vue管理的函數(shù),最好寫成普通函數(shù),這樣this的指向才是vm 或 組件實(shí)例對(duì)象

2.所有不被Vue所管理的函數(shù)(定時(shí)器的回調(diào)函數(shù)、ajax的回調(diào)函數(shù)等、Promise的回調(diào)函數(shù)),最好寫成箭頭函數(shù),這樣this的指向才是vm 或 組件實(shí)例對(duì)象

綁定樣式

class樣式

寫法::class=“xxx” xxx可以是字符串、對(duì)象、數(shù)。

所以分為三種寫法,字符串寫法,數(shù)組寫法,對(duì)象寫法

(1)字符串寫法

字符串寫法適用于:類名不確定,要?jiǎng)討B(tài)獲取。

<style>
	.normal{
        background-color: skyblue;
    }
</style>
<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
    <!-- 綁定class樣式--字符串寫法,適用于:樣式的類名不確定,需要?jiǎng)討B(tài)指定 -->
    <div class="basic" :class="mood" @click="changeMood">{{name}}</div>
</div>
<script>
	const vm = new Vue({
        el:'#root',
        data:{
            mood:'normal'
        }
    })
</script>

(2)數(shù)組寫法

數(shù)組寫法適用于:要綁定多個(gè)樣式,個(gè)數(shù)不確定,名字也不確定。

<style>
    .atguigu1{
        background-color: yellowgreen;
    }
    .atguigu2{
        font-size: 30px;
        text-shadow:2px 2px 10px red;
    }
    .atguigu3{
        border-radius: 20px;
    }
</style>
<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
    <!-- 綁定class樣式--數(shù)組寫法,適用于:要綁定的樣式個(gè)數(shù)不確定、名字也不確定 -->
	<div class="basic" :class="classArr">{{name}}</div>
</div>
<script>
	const vm = new Vue({
        el:'#root',
        data:{
            classArr: ['atguigu1','atguigu2','atguigu3']
        }
    })
</script>

(3)對(duì)象寫法

對(duì)象寫法適用于:要綁定多個(gè)樣式,個(gè)數(shù)確定,名字也確定,但不確定用不用。

<style>
    .atguigu1{
        background-color: yellowgreen;
    }
    .atguigu2{
        font-size: 30px;
        text-shadow:2px 2px 10px red;
    }
</style>
<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
    <!-- 綁定class樣式--對(duì)象寫法,適用于:要綁定的樣式個(gè)數(shù)確定、名字也確定,但要?jiǎng)討B(tài)決定用不用 -->
	<div class="basic" :class="classObj">{{name}}</div>
</div>
<script>
	const vm = new Vue({
        el:'#root',
        data:{
            classObj:{
                atguigu1:false,
                atguigu2:false,
			}
        }
    })
</script>

style樣式

有兩種寫法,對(duì)象寫法,數(shù)組寫法

(1)對(duì)象寫法

<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
    <!-- 綁定style樣式--對(duì)象寫法 -->
	<div class="basic" :style="styleObj">{{name}}</div>
</div>
<script>
	const vm = new Vue({
        el:'#root',
        data:{
            styleObj:{
                fontSize: '40px',
                color:'red',
			}
        }
    })
</script>

(3)數(shù)組寫法

<!-- 準(zhǔn)備好一個(gè)容器-->
<script>
	const vm = new Vue({
        el:'#root',
        data:{
            styleArr:[
                {fontSize: '40px',
                    color:'blue',
                },{
                    backgroundColor:'gray'
                }
            ]
        }
    })
</script>

條件渲染

v-if

(1).v-if=“表達(dá)式”

(2).v-else-if=“表達(dá)式”

(3).v-else=“表達(dá)式”

適用于:切換頻率較低的場(chǎng)景

特點(diǎn):不展示的DOM元素直接被移除

注意:v-if可以和:v-else-if、v-else一起使用,但要求結(jié)構(gòu)不能被“打斷”

v-show

  • 寫法:v-show=“表達(dá)式”
  • 適用于:切換頻率較高的場(chǎng)景
  • 特點(diǎn):不展示的DOM元素未被移除,僅僅是使用樣式隱藏掉(display:none)

備注:使用v-if的時(shí),元素可能無法獲取到,而使用v-show一定可以獲取到

v-if 是實(shí)打?qū)嵉馗淖僤om元素,v-show 是隱藏或顯示dom元素

<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
    <!-- 使用v-show做條件渲染 -->
    <h2 v-show="false">歡迎來到{{name}}</h2>
    <h2 v-show="1 === 1">歡迎來到{{name}}</h2>
</div>

列表渲染

v-for指令

  • 用于展示列表數(shù)據(jù)
  • 語法:v-for=“(item, index) in xxx” :key=“yyy”
  • 可遍歷:數(shù)組、對(duì)象、字符串(用的很少)、指定次數(shù)(用的很少)
<div id="root">
    <!-- 遍歷數(shù)組 -->
    <h2>人員列表(遍歷數(shù)組)</h2>
    <ul>
        <li v-for="(p,index) of persons" :key="index">
            {{p.name}}-{{p.age}}
        </li>
    </ul>
    <!-- 遍歷對(duì)象 -->
    <h2>汽車信息(遍歷對(duì)象)</h2>
    <ul>
        <li v-for="(value,k) of car" :key="k">
            {{k}}-{{value}}
        </li>
    </ul>
    <!-- 遍歷字符串 -->
    <h2>測(cè)試遍歷字符串(用得少)</h2>
    <ul>
        <li v-for="(char,index) of str" :key="index">
            {{char}}-{{index}}
        </li>
    </ul>
    <!-- 遍歷指定次數(shù) -->
    <h2>測(cè)試遍歷指定次數(shù)(用得少)</h2>
    <ul>
        <li v-for="(number,index) of 5" :key="index">
            {{index}}-{{number}}
        </li>
    </ul>
</div>
<script>
	const vm = new Vue({
        el:'#root',
        data: {
			persons: [
				{ id: '001', name: '張三', age: 18 },
				{ id: '002', name: '李四', age: 19 },
				{ id: '003', name: '王五', age: 20 }
			],
			car: {
				name: '奧迪A8',
				price: '70萬',
				color: '黑色'
			},
			str: 'hello'
		}
    })
</script>

vue監(jiān)測(cè)data中的數(shù)據(jù)

<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
    <h2>學(xué)校名稱:{{name}}</h2>
    <h2>學(xué)校地址:{{address}}</h2>
</div>
<script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在啟動(dòng)時(shí)生成生產(chǎn)提示。
    const vm = new Vue({
        el:'#root',
        data:{
            name:'浙江師范大學(xué)',
            address:'金華',
            student:{
                name:'tom',
                age:{
                    rAge:40,
                    sAge:29,
                },
                friends:[
                    {name:'jerry',age:35}
                ]
            }
        }
    })
</script>

Vue.set 的使用

Vue.set(target,propertyName/index,value) 或

vm.$set(target,propertyName/index,value)

用法:

向響應(yīng)式對(duì)象中添加一個(gè) property,并確保這個(gè)新 property 同樣是響應(yīng)式的,且觸發(fā)視圖更新。它必須用于向響

應(yīng)式對(duì)象上添加新 property,因?yàn)?Vue 無法探測(cè)普通的新增 property (比如 vm.myObject.newProperty = 'hi')

//代碼
<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
    <h1>學(xué)生信息</h1>
    <button @click="addSex">添加性別屬性,默認(rèn)值:男</button> <br/>
</div>
<script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在啟動(dòng)時(shí)生成生產(chǎn)提示。
    const vm = new Vue({
        el:'#root',
        data:{
            student:{
                name:'tom',
                age:18,
                hobby:['抽煙','喝酒','燙頭'],
                friends:[
                    {name:'jerry',age:35},
                    {name:'tony',age:36}
                ]
            }
        },
        methods: {
            addSex(){
                // Vue.set(this.student,'sex','男')
                this.$set(this.student,'sex','男')
            }
        }
    })
</script>

所以我們通過 vm._data.student.hobby[0] = ‘aaa’ // 不起作用

vue 監(jiān)測(cè)在數(shù)組那沒有 getter 和 setter,所以監(jiān)測(cè)不到數(shù)據(jù)的更改,也不會(huì)引起頁面的更新

vue對(duì)數(shù)組的監(jiān)測(cè)是通過 包裝數(shù)組上常用的用于修改數(shù)組的方法來實(shí)現(xiàn)的。

收集表單數(shù)據(jù)

(1) 若:輸入框?yàn)槲谋究?,則v-model收集的是value值,用戶輸入的就是value值。

(2) 若:輸入框?yàn)閱芜x框,則v-model收集的是value值,且要給標(biāo)簽配置value值。

(3) 若:輸入框?yàn)閺?fù)選框,則

沒有配置input的value屬性,那么收集的就是checked(勾選 or 未勾選,是布爾值)

配置input的value屬性:

  • v-model的初始值是非數(shù)組,那么收集的就是checked(勾選 or 未勾選,是布爾值)
  • v-model的初始值是數(shù)組,那么收集的的就是value組成的數(shù)組

注: v-model的三個(gè)修飾符:

  • lazy:失去焦點(diǎn)再收集數(shù)據(jù)
  • number:輸入字符串轉(zhuǎn)為有效的數(shù)字
  • trim:輸入首尾空格過濾

到此這篇關(guān)于Vue基礎(chǔ)語法知識(shí)梳理下篇的文章就介紹到這了,更多相關(guān)Vue語法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 源碼剖析Vue3中如何進(jìn)行錯(cuò)誤處理

    源碼剖析Vue3中如何進(jìn)行錯(cuò)誤處理

    錯(cuò)誤處理是框架設(shè)計(jì)的核心要素之一,框架的錯(cuò)誤處理好壞,直接決定用戶應(yīng)用程序的健壯性以及用戶開發(fā)應(yīng)用時(shí)處理錯(cuò)誤的心智負(fù)擔(dān),本文將從源碼入手,剖析一下Vue3中是如何進(jìn)行錯(cuò)誤處理的,需要的可以參考下
    2024-01-01
  • vue+video.js視頻播放、視頻切換、視頻斷點(diǎn)分段上傳功能

    vue+video.js視頻播放、視頻切換、視頻斷點(diǎn)分段上傳功能

    本次需求是做一個(gè)視頻列表,點(diǎn)擊視頻列表播放對(duì)應(yīng)視頻;同時(shí)要求實(shí)現(xiàn)斷點(diǎn)分段上傳大文件(視頻)的功能,今天通過本文給大家講解下vue+video.js視頻播放、視頻切換、視頻斷點(diǎn)分段上傳功能,感興趣的朋友一起看看吧
    2022-12-12
  • 使用vue點(diǎn)擊li,獲取當(dāng)前點(diǎn)擊li父輩元素的屬性值方法

    使用vue點(diǎn)擊li,獲取當(dāng)前點(diǎn)擊li父輩元素的屬性值方法

    今天小編就為大家分享一篇使用vue點(diǎn)擊li,獲取當(dāng)前點(diǎn)擊li父輩元素的屬性值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue.js購物車添加商品組件的方法

    vue.js購物車添加商品組件的方法

    這篇文章主要介紹了vue.js購物車添加商品組件的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Vue2.0用戶權(quán)限控制解決方案

    Vue2.0用戶權(quán)限控制解決方案

    這篇文章主要介紹了Vue2.0用戶權(quán)限控制解決方法以及源碼說明,一起學(xué)習(xí)下。
    2017-11-11
  • 使用vue指令實(shí)現(xiàn)吸頂效果

    使用vue指令實(shí)現(xiàn)吸頂效果

    要想實(shí)現(xiàn)一個(gè)吸頂效果不是很難,網(wǎng)絡(luò)上有很多教程,其中有一種就是通過fiexd加top來實(shí)現(xiàn),今天突然就想做一個(gè)吸頂效果,因?yàn)樽罱荚谟胿ue,所以想用vue來做一個(gè)吸頂效果的案例,感興趣的朋友可以參考下
    2023-11-11
  • Vue頁面跳轉(zhuǎn)傳遞參數(shù)及接收方式

    Vue頁面跳轉(zhuǎn)傳遞參數(shù)及接收方式

    這篇文章主要介紹了Vue頁面跳轉(zhuǎn)傳遞參數(shù)及接收方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue-cli3 引入 font-awesome的操作

    vue-cli3 引入 font-awesome的操作

    這篇文章主要介紹了vue-cli3 引入 font-awesome的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Vue?Router動(dòng)態(tài)路由實(shí)現(xiàn)實(shí)現(xiàn)更靈活的頁面交互

    Vue?Router動(dòng)態(tài)路由實(shí)現(xiàn)實(shí)現(xiàn)更靈活的頁面交互

    Vue?Router是Vue.js官方的路由管理器,用于構(gòu)建SPA(單頁應(yīng)用程序),本文將深入探討Vue?Router的動(dòng)態(tài)路由功能,希望可以幫助大家更好地理解和應(yīng)用Vue.js框架
    2024-02-02
  • vue ssr 指南詳讀

    vue ssr 指南詳讀

    這篇文章主要介紹了vue ssr 指南詳讀,詳細(xì)的介紹了什么是SSR以及如何使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06

最新評(píng)論

和静县| 隆林| 阿坝| 鹤庆县| 达州市| 富源县| 颍上县| 乐至县| 阿拉尔市| 陕西省| 广南县| 黔西| 吴江市| 彭泽县| 紫云| 乌拉特中旗| 古田县| 崇文区| 岳西县| 青冈县| 内乡县| 海林市| 和顺县| 西乌珠穆沁旗| 民县| 陆川县| 铜山县| 北川| 宁远县| 桦甸市| 台北市| 攀枝花市| 霍城县| 石狮市| 商洛市| 汉寿县| 克什克腾旗| 松阳县| 平陆县| 武平县| 喀喇|