最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Vue01- 指令,過濾器,樣式

2023-06-20 09:19 作者:廢品批發(fā)  | 我要投稿

[題外話:ES6的新特性](https://www.jianshu.com/p/ac1787f6c50f)

MVVM模式


實(shí)例: ?

項(xiàng)目的目錄結(jié)構(gòu): ?

項(xiàng)目的運(yùn)行方式: ?

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

? ? let a={x:1,y:2};

? ? let b={z:1};

? ? Object.defineProperty(b,'x',{

? ? ? ? get(){

? ? ? ? ? ? return a.x;

? ? ? ? },

? ? ? ? set(value){

? ? ? ? ? ? a.x=value

? ? ? ? }

? ? })

通過修改b中的x屬性就可以修改a中的x.


vue使用同樣的原理: 當(dāng)我們在vue實(shí)例中定義data時(shí), data中的數(shù)據(jù)就會被以同樣的方式被copy到vm(vue實(shí)例, 也是mvvm中的vm)上, 在vue實(shí)例的_data就是定義的data.


這解釋了為什么vue中在data中設(shè)置了數(shù)據(jù), 可以通過this.???調(diào)用, this指的就是vm, 即vue的實(shí)例, vm中被同步了data中的數(shù)據(jù), 一旦發(fā)生修改data中的數(shù)據(jù)會被修改則是因?yàn)槭褂昧藬?shù)據(jù)代理.

指令

v-cloak

該指令其本質(zhì)上是保持在元素上直到關(guān)聯(lián)實(shí)例結(jié)束編譯,保持期間運(yùn)行指令定義的邏輯。

v-text

? ? <div v-html="msg">ddddd</div>

? ? <script>

? ? ? ? var vw=new Vue({

? ? ? ? ? ? data:{

? ? ? ? ? ? ? ? msg: '<h1>zzzzzz</h1>'

? ? ? ? ? ? }

? ? ? ? })

? ? </script>

v-html也會直接覆蓋標(biāo)簽中的文本,但是它在解析時(shí)會將h1這樣的元素當(dāng)成html內(nèi)容,不會原樣解析,這是v-text或插值表達(dá)式不能做到的,這兩者是直接解釋。

v-bind

**注意:v-bind:可以被簡寫為 :,它會把后面的屬性值中的內(nèi)容理解為js處理,所以 :title=“mytitle+‘123’” 是可以被解釋為mytitle變量值與123的字符串拼接。**

插值表達(dá)式通常用于指定標(biāo)簽內(nèi)部的顯示, v-bind用于標(biāo)簽屬性的指定.

插值表達(dá)式中可以使用vue實(shí)例中的任何一個(gè)屬性字段.

v-on

該指令用于綁定事件,**縮寫為 @**。

? ? <input type="button" v-on:click="show">

? ? <script>

? ? ? ? var vm=new Vue({

? ? ? ? ? ? el: '..........',

? ? ? ? ? ? data:{

? ? ? ? ? ? ? ? ...........

? ? ? ? ? ? },

? ? ? ? ? ? methods:{

? ? ? ? ? ? ? ? show: function (){

? ? ? ? ? ? ? ? ? ? alert("Hello!");

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? })

? ? </script>

這里值得一提的另一件事:

? ? <input type="button" v-on:click="show(33333)">

? ? <script>

? ? ? ? var vm=new Vue({

? ? ? ? ? ? el: '..........',

? ? ? ? ? ? data:{

? ? ? ? ? ? ? ? ...........

? ? ? ? ? ? },

? ? ? ? ? ? methods:{

? ? ? ? ? ? ? ? show(value){

? ? ? ? ? ? ? ? ? ? alert(value);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? })

? ? </script>

JS中的函數(shù)調(diào)用默認(rèn)會傳入一個(gè)event作為隱藏參數(shù), 即

? ? <input type="button" v-on:click="show">

? ? <script>

? ? ? ? var vm=new Vue({

? ? ? ? ? ? el: '..........',

? ? ? ? ? ? data:{

? ? ? ? ? ? ? ? ...........

? ? ? ? ? ? },

? ? ? ? ? ? methods:{

? ? ? ? ? ? ? ? show(event){

? ? ? ? ? ? ? ? ? ? alert(event.target); //這里的target就會顯示上面那個(gè)button.

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? })

? ? </script>

但一旦我們傳入?yún)?shù)show(33333), 就會導(dǎo)致event這個(gè)隱藏參數(shù)失效.

所以:

? ? <input type="button" v-on:click="show(33333,$event)">

? ? <script>

? ? ? ? var vm=new Vue({

? ? ? ? ? ? el: '..........',

? ? ? ? ? ? data:{

? ? ? ? ? ? ? ? ...........

? ? ? ? ? ? },

? ? ? ? ? ? methods:{

? ? ? ? ? ? ? ? show(value,event){

? ? ? ? ? ? ? ? ? ? alert(event.target); //這樣就可以保留event這個(gè)參數(shù), 該參數(shù)在很多需求的實(shí)現(xiàn)時(shí)會很有用, 可使用此方式保留.

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? })

? ? </script>

?“跑馬燈”功能:

在vue實(shí)例中訪問自身的問題: ?

課題代碼: ?

v-model

雙向數(shù)據(jù)綁定指令。 ?

v-model用于收集表單元素的value值, v-model:value=???, 可以簡寫成v-model=???

v-for

循環(huán)普通數(shù)組 ?

循環(huán)對象數(shù)組 ?

循環(huán)對象的屬性 ?

迭代數(shù)字 ?


注意:v-for在渲染時(shí)可能會有下列問題:

v-for練習(xí)

v-show和v-if

當(dāng)v-if的值切換時(shí),會不斷的進(jìn)行元素的創(chuàng)建和刪除,而v-show是一定創(chuàng)建然后進(jìn)行是否顯示的切換,所以**v-if有較高的切換性能消耗,而v-show有較高的初始渲染消耗。**

自定義指令

自定義全局指令

指令設(shè)置函數(shù)的其他參數(shù): ?

? ? binding:一個(gè)對象,包含以下屬性:

? ? ? ? name: 指令名,不包括 v-前綴

? ? ? ? value: 指令的綁定值,例如:v-my-directive=‘1+1’,value的值是2

? ? ? ? oldValue: 指令綁定的前一個(gè)值,只在update和componentUpdated中可用,無論值是否改變都可用。

? ? ? ? expression: 綁定值的字符串形式。例如 v-my-directive="1 + 1" 中,表達(dá)式為 "1 + 1"。

? ? ? ? arg: 傳給指令的參數(shù),可選。例如 v-my-directive:foo 中,參數(shù)為 "foo"。

? ? ? ? modifiers: 一個(gè)包含修飾符的對象。例如:v-my-directive.foo.bar 中,修飾符對象為 { foo: true, bar: true }。

? ? vnode:vue編譯生成的虛擬節(jié)點(diǎn)

? ? oldVnode:上一個(gè)虛擬節(jié)點(diǎn),僅在update和componentUpdated鉤子中可用。

除了 el 之外,其他參數(shù)應(yīng)該是只讀的,盡量不要修改它們。如果需要在鉤子函數(shù)之間共享參數(shù),建議通過元素的dataset進(jìn)行。 ?

自定義私有指令

使用directives屬性進(jìn)行相關(guān)設(shè)置: ?

函數(shù)簡寫

此時(shí)函數(shù)中的內(nèi)容將被認(rèn)為同時(shí)寫入update和bind中。??

事件修飾符

**.stop阻止冒泡:** ?

**.prevent阻止默認(rèn)行為:** ?

只阻止元素默認(rèn)的行為,對于點(diǎn)擊事件等是不阻止的。 ?

**.capture添加事件偵聽器時(shí)使用事件捕獲模式:** ?

添加該修飾,將導(dǎo)致從外向內(nèi)觸發(fā)函數(shù), 即捕獲階段就啟動函數(shù), 而不加該修飾符默認(rèn)使用冒泡模式, 在捕獲階段不會有動靜。 ?

**.self只當(dāng)事件在該元素本身(比如不是子元素)觸發(fā)時(shí)觸發(fā)回調(diào):** ? ?

**.once事件只觸發(fā)一次:** ? ?

.self和.stop的區(qū)別: ?

按鍵修飾符

vue可以使用@keyup開啟對于鍵盤按鍵抬起事件的監(jiān)聽,通過在后面添加修飾符可以控制響應(yīng)特定的按鍵。

系統(tǒng)開放的按鍵修飾符: ?

? ? .enter

? ? .tab (特殊, 配合keydown使用,不要keyup, tab鍵本身有切換焦點(diǎn)的功能)

? ? .delete

? ? .esc

? ? .space

? ? .up

? ? .down

? ? .left

? ? .right

對于沒有的按鍵,方法一:@keyup.13 這里的13就是enter鍵的鍵碼。 ?

其他鍵碼: [JS keyCode鍵碼](https://www.cnblogs.com/cnblogs-jcy/p/6409672.html)

也可以使用event.keyCode進(jìn)行顯示.

如果要鍵盤監(jiān)聽ctrl+y這樣的多鍵連用, 則@keyup.ctrl.y="????"


自定義按鍵修飾符: ?

計(jì)算屬性

? ? computed:{

? ? ? ? newProperty:{ ?//newProperty就是你要新增的動態(tài)屬性

? ? ? ? ? ? get(){

? ? ? ? ? ? ? ? return ???

? ? ? ? ? ? },

? ? ? ? ? ? set(value){


? ? ? ? ? ? }

? ? ? ? }

? ? }

簡寫, (簡寫時(shí)一定是明確要放棄使用set部分才行):

? ? computed:{

? ? ? ? newProperty(){ ?//newProperty就是你要新增的動態(tài)屬性

? ? ? ? ? ? return ???

? ? ? ? }

? ? }

VUE中使用樣式

class樣式

[數(shù)組中的方法](https://blog.csdn.net/qq_42303885/article/details/85332359) ?

使用v-bind綁定數(shù)組

<div :class="['red','thin']"> ?//其中red和thin都是定義好的class,注意數(shù)組內(nèi)的引號不能省略!

v-bind與數(shù)組結(jié)合使用時(shí),數(shù)組內(nèi)可以使用三元表達(dá)式

? ? //當(dāng)數(shù)組中的字符沒有被引號修飾,將被解析為變量,flag將被解析為變量,使用三元表達(dá)式確定后面的class

? ? <div id='app' :class="['red','thin',flag?'active':'']">

? ? <script>

? ? ? ? var vm=new Vue({

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

? ? ? ? ? ? data:{

? ? ? ? ? ? ? ? flag:true

? ? ? ? ? ? }

? ? ? ? })

? ? </script>

v-bind與數(shù)組結(jié)合使用時(shí),數(shù)組內(nèi)可以使用對象

? ? //在對象中使用class作為key,用變量作為value,以決定class是否被應(yīng)用

? ? <div id='app' :class="['red','thin',{'active':flag}]">

? ? <script>

? ? ? ? var vm=new Vue({

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

? ? ? ? ? ? data:{

? ? ? ? ? ? ? ? flag:true

? ? ? ? ? ? }

? ? ? ? })

? ? </script>

v-bind綁定的class中直接使用對象

?//這種情況下對象的屬性可以省略引號,對象屬性設(shè)置為class,對象值設(shè)置為true/false

?<div id='app' :class="{red:true,thin:true,active:true}">

也可以這樣,將對象移動到data中再綁定

? ? <div id='app' :class="obj">

? ? <script>

? ? ? ? var vm=new Vue({

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

? ? ? ? ? ? data:{

? ? ? ? ? ? ? ? flag:true,

? ? ? ? ? ? ? ? obj:{red:true,thin:true,active:true}

? ? ? ? ? ? }

? ? ? ? })

? ? </script>

內(nèi)聯(lián)樣式

v-bind綁定style,style內(nèi)設(shè)置對象

?//對象本質(zhì)上是無序的鍵值對,red帶引號是為了不被當(dāng)做變量處理,font-weight帶引號是因?yàn)閹-`的屬性, 引號不能省略。

? ? <div id='app' :style="{color:'red','font-weight':200}">

? ? <script>

? ? ? ? var vm=new Vue({

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

? ? ? ? ? ? data:{

? ? ? ? ? ? ? ? flag:true

? ? ? ? ? ? }

? ? ? ? })

? ? </script>

? ? //當(dāng)然,我們也可以把對象抽取出來設(shè)置到data中

? ? <div id='app' :style="obj">

? ? <script>

? ? ? ? var vm=new Vue({

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

? ? ? ? ? ? data:{

? ? ? ? ? ? ? ? flag:true,

? ? ? ? ? ? ? ? obj:{color:'red','font-weight:200}

? ? ? ? ? ? }

? ? ? ? })

? ? </script>

v-bind綁定style,style內(nèi)設(shè)置數(shù)組,數(shù)組中可以設(shè)置多個(gè)對象

? ? <div id='app' :style="[obj1,obj2]">

? ? <script>

? ? ? ? var vm=new Vue({

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

? ? ? ? ? ? data:{

? ? ? ? ? ? ? ? flag:true,

? ? ? ? ? ? ? ? obj1:{color:'red','font-weight':200}

? ? ? ? ? ? ? ? obj2:{'font-style':'italic'}

? ? ? ? ? ? }

? ? ? ? })

? ? </script>

過濾器

Vue允許自定義過濾器以進(jìn)行常見文本的格式化。 ?

過濾器可以被應(yīng)用于mustachc插值和v-bind表達(dá)式。 ?

過濾器需要被添加在JavaScript尾部,由管道符 `|` 指示。 ?

管道符前面的會作為第一個(gè)參數(shù)n, nameFilter2(2222)代碼中傳入的2222其實(shí)是作為函數(shù)中定義的arg. ?

**注意:通過方式一定義的過濾器為全局過濾器,必須定義在vue實(shí)例之前!全局過濾器可以被多個(gè)vue實(shí)例使用,方法二的私有過濾器只能被當(dāng)前實(shí)例使用。**??

當(dāng)私有過濾器和全局過濾器重名時(shí),調(diào)用時(shí)私有過濾器優(yōu)先級更高,全局的將不會調(diào)用。??

Stylus語法

如果要使用stylus語法需要: ?

[Stylus官網(wǎng)](http://stylus-lang.com/)? ??

vue需要安裝相應(yīng)的loader才能解析該語法.



Vue01- 指令,過濾器,樣式的評論 (共 條)

分享到微博請遵守國家法律
浦东新区| 博客| 五常市| 林口县| 共和县| 宾川县| 沧州市| 赤城县| 开阳县| 平陆县| 定结县| 肃宁县| 通城县| 峡江县| 浦江县| 长汀县| 江源县| 嘉义县| 三穗县| 盐山县| 鄂托克旗| 托克逊县| 津市市| 灵川县| 宁都县| 尖扎县| 泽库县| 文化| 济源市| 宁德市| 嵊州市| 普安县| 包头市| 阳西县| 泌阳县| 安平县| 佛坪县| 梅州市| 灌云县| 光泽县| 永胜县|