亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

Vue簡(jiǎn)介

  • 讓Vue工作,就須創(chuàng)建一個(gè)Vue實(shí)例,且要傳入一個(gè)配置對(duì)象
  • demo容器里的代碼符合html規(guī)范,只不過混入了一些特殊的Vue語法
  • demo容器里的代碼被稱為【Vue模板】
  • Vue實(shí)例和容器是一一對(duì)應(yīng)的
  • 真實(shí)開發(fā)中只有一個(gè)Vue實(shí)例,并且會(huì)配合著組件一起使用
  • {{xxx}}是Vue的語法:插值表達(dá)式,{{xxx}}可以讀取到data中的所有屬性
  • 一旦data中的數(shù)據(jù)發(fā)生改變,那么頁面中用到該數(shù)據(jù)的地方也會(huì)自動(dòng)更新(Vue實(shí)現(xiàn)的響應(yīng)式)
<!-- 準(zhǔn)備好一個(gè)容器 -->
<div id="demo">
	<h1>Hello,{{name.toUpperCase()}},{{address}}</h1>
</div>
<script type="text/javascript" >
	Vue.config.productionTip = false //阻止 vue 在啟動(dòng)時(shí)生成生產(chǎn)提示。
	//創(chuàng)建Vue實(shí)例
	new Vue({
		el:'#demo', //el用于指定當(dāng)前Vue實(shí)例為哪個(gè)容器服務(wù),值通常為css選擇器字符串。
		data:{ //data中用于存儲(chǔ)數(shù)據(jù),數(shù)據(jù)供el所指定的容器去使用,值我們暫時(shí)先寫成一個(gè)對(duì)象。
			name:'hello,world',
			address:'北京'
		}
	});
</script>

模板語法

(1)插值語法:

功能:用于解析標(biāo)簽體內(nèi)容

寫法:{{xxx}},xxx是js表達(dá)式,且可以直接讀取到data中的所有屬性

(2)指令語法:

功能:用于解析標(biāo)簽(包括:標(biāo)簽屬性、標(biāo)簽體內(nèi)容、綁定事件…)

舉例:v-bind:href=“xxx” 或 簡(jiǎn)寫為

:href=“xxx”,xxx同樣要寫js表達(dá)式,且可以直接讀取到data中的所有屬性

<div id="root">
	<h1>插值語法</h1>
	<h3>你好,{{name}}</h3>
	<hr/>
	<h1>指令語法</h1>
    <!-- 這里是展示被Vue指令綁定的屬性,引號(hào)內(nèi)寫的是js表達(dá)式 -->
	<a :href="school.url.toUpperCase()" rel="external nofollow"  x="hello">點(diǎn)我去{{school.name}}學(xué)習(xí)1</a>
	<a :href="school.url" rel="external nofollow"  x="hello">點(diǎn)我去{{school.name}}學(xué)習(xí)2</a>
</div>
<script>
    new Vue({
		el:'#root',
		data:{
			name:'jack',
			school:{
				name:'百度',
				url:'http://www.baidu.com',
			}
        }
	})
</script>

數(shù)據(jù)綁定

(1)單向綁定(v-bind):數(shù)據(jù)只能從data流向頁面

(2)雙向綁定(v-model):數(shù)據(jù)不僅能從data流向頁面,還可以從頁面流向data

1.雙向綁定一般都應(yīng)用在表單類元素上(如:input、select等)

2.v-model:value 可以簡(jiǎn)寫為 v-model,因?yàn)関-model默認(rèn)收集的就是value值

<div id="root">
	<!-- 普通寫法 單向數(shù)據(jù)綁定 -->
    單向數(shù)據(jù)綁定:<input type="text" v-bind:value="name"><br/>
    雙向數(shù)據(jù)綁定:<input type="text" v-model:value="name"><br/>
    <!-- 簡(jiǎn)寫 v-model:value 可以簡(jiǎn)寫為 v-model,因?yàn)関-model默認(rèn)收集的就是value值-->
    單向數(shù)據(jù)綁定:<input type="text" :value="name"><br/>
    雙向數(shù)據(jù)綁定:<input type="text" v-model="name"><br/>
</div>
<script>
    new Vue({
		el:'#root',
		data:{
			name:'jack',
        }
	})
</script>

el與data的兩種寫法

(1)el有2種寫法

  • new Vue時(shí)候配置el屬性
  • 先創(chuàng)建Vue實(shí)例,隨后再通過vm.$mount(‘#root’)指定el的值
<script>
   	// 第一種 
	const vm = new Vue({
		el:'#root',
		data:{
			name:'jack',
        }
	})
    // 第二種
    vm.$mount('#root')
</script>

(2)data有2種寫法

  • 對(duì)象式
  • 函數(shù)式

在組件中,data必須使用函數(shù)式

<script>
    new Vue({
		el:'#root',
        // 第一種
		data:{
			name:'jack',
        }
        // 第二種
        data() {
        	return {
                name: 'jack'
            }
    	}
	})
</script>

Vue中的MVVM

  • M:模型(Model) :data中的數(shù)據(jù)
  • V:視圖(View) :模板代碼
  • VM:視圖模型(ViewModel):Vue實(shí)例

數(shù)據(jù)代理

了解數(shù)據(jù)代理需要js的一些知識(shí):Object.defineProperty(),屬性標(biāo)志,屬性描述符,getter,setter

屬性標(biāo)志:

對(duì)象屬性(properties),除 value 外,還有三個(gè)特殊的特性(attributes),也就是所謂的“標(biāo)志”

  • writable — 如果為 true,則值可以被修改,否則它是只可讀的
  • enumerable — 如果為 true,則表示是可以遍歷的,可以在for… .in Object.keys()中遍歷出來
  • configurable — 如果為 true,則此屬性可以被刪除,這些特性也可以被修改,否則不可以

Object.getOwnPropertyDescriptor(obj, propertyName)

這個(gè)方法是查詢有關(guān)屬性的完整信息 obj是對(duì)象, propertyName是屬性名

let user = {
  name: "John"
};
let descriptor = Object.getOwnPropertyDescriptor(user, 'name');
console.log(descriptor)
/* 屬性描述符:
{
  "value": "John",
  "writable": true,
  "enumerable": true,
  "configurable": true
}
*/

Object.defineProperty(obj, prop, descriptor)

obj:要定義屬性的對(duì)象。

prop:要定義或修改的屬性的名稱

descriptor:要定義或修改的屬性描述符

let user = {
  name: "John"
};
Object.defineProperty(user, "name", {
  writable: false
});
user.name = "Pete";
// 打印后還是顯示 'John',無法修改name值

其他的屬性標(biāo)志就不演示了,接下來看重點(diǎn):訪問器屬性。

訪問器屬性:

本質(zhì)上是用于獲取和設(shè)置值的函數(shù),但從外部代碼來看就像常規(guī)屬性。

訪問器屬性由 “getter” 和 “setter” 方法表示。在對(duì)象字面量中,它們用 getset 表示:

let obj = {
    get name() {
        // 當(dāng)讀取 obj.propName 時(shí),getter 起作用
    },
    set name() {
        // 當(dāng)執(zhí)行 obj.name = value 操作時(shí),setter 起作用
    }
}

更復(fù)雜一點(diǎn)的使用

let user = {
	surname: 'gao',
    name: 'han'
    get fullName() {
        return this.name + this.surname;
    }
}
console.log(user.fullName)

從外表看,訪問器屬性看起來就像一個(gè)普通屬性。這就是訪問器屬性的設(shè)計(jì)思想。我們不以函數(shù)的方式 調(diào)用 user.fullName,我們正常 讀取 它:getter 在幕后運(yùn)行。

截至目前,fullName 只有一個(gè) getter。如果我們嘗試賦值操作 user.fullName=,將會(huì)出現(xiàn)錯(cuò)誤:

user.fullName = "Test"; // Error(屬性只有一個(gè) getter)

user.fullName 添加一個(gè) setter 來修復(fù)它:

let user = {
	surname: 'gao',
    name: 'han'
    get fullName() {
        return this.name + ' ' + this.surname;
    }
	set fullName(value) {
        // 這個(gè)用到了新語法 結(jié)構(gòu)賦值
        [this.surname, this.name] = value.split(' ');
    }
}
user.fullName = 'Li Hua'
console.log(user.name);
console.log(user.surname);

數(shù)據(jù)代理:

數(shù)據(jù)代理:通過一個(gè)對(duì)象代理對(duì)另一個(gè)對(duì)象中屬性的操作(讀/寫)

例:
let obj = {
    x: 100
}
let obj2 = {
    y: 200
}

我們想要訪問 **obj** 中的 **x** 的值,但我們最好不要直接去訪問 **obj** ,而是想要通過 **obj2** 這個(gè)代理對(duì)象去訪問。

這時(shí)候就可以用上 Object.defineProperty(),給 obj2 添加訪問器屬性(也就是getter和setter)

代碼

let obj = {
    x: 100
}
let obj2 = {
    y: 200
}
Object.defineProperty(obj2, 'x', {
    get() {
        return obj.x;
    },
    set(value) {
        obj.x = value;
    }
})

Vue中的數(shù)據(jù)代理

Vue中的數(shù)據(jù)代理:通過vm對(duì)象來代理data對(duì)象中屬性的操作(讀/寫)

Vue中數(shù)據(jù)代理的好處:更加方便的操作data中的數(shù)據(jù)

基本原理:

  • 通過Object.defineProperty()把data對(duì)象中所有屬性添加到vm上。
  • 為每一個(gè)添加到vm上的屬性,都指定一個(gè)getter/setter。
  • 在getter/setter內(nèi)部去操作(讀/寫)data中對(duì)應(yīng)的屬性。
<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
	<h2>學(xué)校名稱:{{name}}</h2>
	<h2>學(xué)校地址:{{address}}</h2>
</div>
<script>
	const vm = new Vue({
        el: '#root',
        data: {
            name: '浙江師范大學(xué)',
            address: '浙江金華'
        }
    })
</script>

我們?cè)诳刂婆_(tái)打印 new 出來的 vm

可以看到,寫在配置項(xiàng)中的 data 數(shù)據(jù)被 綁定到了 vm 對(duì)象上,我先來講結(jié)果,是 Vue 將 _data 中的 name,address 數(shù)據(jù) 代理到 vm 本身上。

先來解釋下_data 是啥, _data 就是 vm 身上的 _data 屬性,就是下圖那個(gè)

這個(gè) _data 是從哪來的?

<script>
	const vm = new Vue({
        el: '#root',
        // 我們?cè)赩ue 初始化的配置項(xiàng)中寫了 data 屬性。
        data: {
            name: '浙江師范大學(xué)',
            address: '浙江金華'
        }
    })
</script>

new Vue 時(shí), Vue 通過一系列處理, 將匹配項(xiàng)上的 data 數(shù)據(jù)綁定到了 _data 這個(gè)屬性上,并對(duì)這個(gè)屬性進(jìn)行了處理(數(shù)據(jù)劫持),但這個(gè)屬性就是來源于配置項(xiàng)中的 data,我們可以來驗(yàn)證一下。

<script>
    let data1 = {
        name: '浙江師范大學(xué)',
        address: '浙江金華'
    }
	const vm = new Vue({
        el: '#root',
        // 我們?cè)赩ue 初始化的配置項(xiàng)中寫了 data 屬性。
        data: data1
    })
</script>

這一切都是通過 Object.defineProperty() 來完成的,我來模擬一下這個(gè)過程

Object.defineProperty(vm, 'name', {
    get() {
        return vm._data.name;
    },
    set(value) {
        vm._data.name = value
    }
})

在插值語法中,{{ name }} 取到的值就相當(dāng)于 {{ vm.name }},不用數(shù)據(jù)代理的話,在插值語法就要這樣去寫了。

事件處理

事件的基本使用:

  • 使用v-on:xxx 或 @xxx 綁定事件,其中xxx是事件名
  • 事件的回調(diào)需要配置在methods對(duì)象中,最終會(huì)在vm上
  • methods中配置的函數(shù),都是被Vue所管理的函數(shù),this的指向是vm 或 組件實(shí)例對(duì)象
<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
    <h2>歡迎來到{{name}}學(xué)習(xí)</h2>
    <!-- <button v-on:click="showInfo">點(diǎn)我提示信息</button> -->
    <button @click="showInfo1">點(diǎn)我提示信息1(不傳參)</button>
    <!-- 主動(dòng)傳事件本身 -->
    <button @click="showInfo2($event,66)">點(diǎn)我提示信息2(傳參)</button>
</div>
<script>
	const vm = new Vue({
        el:'#root',
        data:{
            name:'vue',
        },
        methods:{
            // 如果vue模板沒有寫event,會(huì)自動(dòng)傳 event 給函數(shù)
            showInfo1(event){
                // console.log(event.target.innerText)
                // console.log(this) //此處的this是vm
                alert('同學(xué)你好!')
            },
            showInfo2(event,number){
                console.log(event,number)
                // console.log(event.target.innerText)
                // console.log(this) //此處的this是vm
                alert('同學(xué)你好??!')
            }
        }
	});
</script>

Vue中的事件修飾符

  • prevent:阻止默認(rèn)事件(常用)
  • stop:阻止事件冒泡(常用)
  • once:事件只觸發(fā)一次(常用)
<div id="root">
    <h2>歡迎來到{{name}}學(xué)習(xí)</h2>
    <!-- 阻止默認(rèn)事件(常用) -->
	<a  rel="external nofollow"  @click.prevent="showInfo">點(diǎn)我提示信息</a>
    <!-- 阻止事件冒泡(常用) -->
    <div class="demo1" @click="showInfo">
        <button @click.stop="showInfo">點(diǎn)我提示信息</button>
        <!-- 修飾符可以連續(xù)寫 -->
        <!-- <a  rel="external nofollow"  @click.prevent.stop="showInfo">點(diǎn)我提示信息</a> -->
    </div>
    <!-- 事件只觸發(fā)一次(常用) -->
    <button @click.once="showInfo">點(diǎn)我提示信息</button>
</div>

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

相關(guān)文章

  • Vue.js bootstrap前端實(shí)現(xiàn)分頁和排序

    Vue.js bootstrap前端實(shí)現(xiàn)分頁和排序

    這篇文章主要為大家詳細(xì)介紹了Vue.js結(jié)合bootstrap前端實(shí)現(xiàn)分頁和排序效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 淺談Vue單頁面做SEO的四種方案

    淺談Vue單頁面做SEO的四種方案

    Vue SPA單頁面應(yīng)用對(duì)SEO不友好,當(dāng)然也有相應(yīng)的解決方案,通過查找資料,大概有以下4種方法,本文就詳細(xì)的介紹一下
    2021-10-10
  • vue使用ElementUI時(shí)導(dǎo)航欄默認(rèn)展開功能的實(shí)現(xiàn)

    vue使用ElementUI時(shí)導(dǎo)航欄默認(rèn)展開功能的實(shí)現(xiàn)

    這篇文章主要介紹了vue使用ElementUI時(shí)導(dǎo)航欄默認(rèn)展開功能的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • Vue中Router路由兩種模式hash與history詳解

    Vue中Router路由兩種模式hash與history詳解

    這篇文章主要介紹了Vue中Router路由的兩種模式,分別對(duì)hash模式與history模式作了簡(jiǎn)要分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • 詳解keep-alive組件緩存

    詳解keep-alive組件緩存

    keep-alive是Vue中一個(gè)非常有用的特性,它可以幫助我們避免重復(fù)渲染和減少組件的渲染次數(shù),從而提高應(yīng)用程序的性能,本文給大家介紹keep-alive組件緩存的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2024-01-01
  • 詳解服務(wù)端預(yù)渲染之Nuxt(介紹篇)

    詳解服務(wù)端預(yù)渲染之Nuxt(介紹篇)

    這篇文章主要介紹了詳解服務(wù)端預(yù)渲染之Nuxt(介紹篇),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-04-04
  • 在Vue 中獲取下拉框的文本及選項(xiàng)值操作

    在Vue 中獲取下拉框的文本及選項(xiàng)值操作

    這篇文章主要介紹了在Vue 中獲取下拉框的文本及選項(xiàng)值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue中使用js-doc的案例代碼

    vue中使用js-doc的案例代碼

    這篇文章主要介紹了vue中使用js-doc的相關(guān)知識(shí),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • 安裝vue無法運(yùn)行、此系統(tǒng)無法運(yùn)行腳本問題及解決

    安裝vue無法運(yùn)行、此系統(tǒng)無法運(yùn)行腳本問題及解決

    這篇文章主要介紹了安裝vue無法運(yùn)行、此系統(tǒng)無法運(yùn)行腳本問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue.js body的css不生效問題及解決

    vue.js body的css不生效問題及解決

    這篇文章主要介紹了vue.js body的css不生效問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評(píng)論