成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

你想知道的vue的模板語(yǔ)法

LeviDing / 1694人閱讀

摘要:模板語(yǔ)法插值文本數(shù)據(jù)綁定最常見(jiàn)的形式就是使用語(yǔ)法雙大括號(hào)的文本插值標(biāo)簽將會(huì)被替代為對(duì)應(yīng)數(shù)據(jù)對(duì)象上屬性的值。指令的職責(zé)是,當(dāng)表達(dá)式的值改變時(shí),將其產(chǎn)生的連帶影響,響應(yīng)式地作用于。通常更好的想法是使用屬性而不是命令式的回調(diào)。

模板語(yǔ)法 插值 文本

數(shù)據(jù)綁定最常見(jiàn)的形式就是使用 “Mustache” 語(yǔ)法(雙大括號(hào))的文本插值:

Message: {{ msg }}

Mustache 標(biāo)簽將會(huì)被替代為對(duì)應(yīng)數(shù)據(jù)對(duì)象上 msg 屬性的值。無(wú)論何時(shí),綁定的數(shù)據(jù)對(duì)象上 msg 屬性發(fā)生了改變,插值處的內(nèi)容都會(huì)更新。
通過(guò)使用 v-once 指令,你也能執(zhí)行一次性地插值,當(dāng)數(shù)據(jù)改變時(shí),插值處的內(nèi)容不會(huì)更新。但請(qǐng)留心這會(huì)影響到該節(jié)點(diǎn)上所有的數(shù)據(jù)綁定:

這個(gè)將不會(huì)改變: {{ msg }}
純HTML

Mustache語(yǔ)法是將數(shù)據(jù)渲染到模板,但是渲染上去的是純文本,我們不能夠輸出真正的HTML。如果我們需要渲染一個(gè)HTML,我們需要shi用v-html指令:

var vm = new Vue({
    el:"#box",
    data:{
        msg:"

血染的風(fēng)采

" } })
血染的風(fēng)采
特性

mustache 語(yǔ)法不能作用在 HTML 特性上,遇到這種情況應(yīng)該使用 v-bind 指令:

var vm = new Vue({
    el:"#box",
    data:{
        msg:100
    }
})
控制臺(tái)可看div的index為101

這同樣適用于布爾類(lèi)特性,如果求值結(jié)果是 false 的值,則該特性將會(huì)被刪除:

// 當(dāng)isButtonDisabled為true時(shí),button不可以點(diǎn)擊,為false時(shí),disabled這個(gè)屬性會(huì)刪除,button可以點(diǎn)擊。
使用javascript表達(dá)式

我們可以在mustache語(yǔ)法中使用javascript表達(dá)式,例如:

{{msg+1}}
var vm = new Vue({
    el:"#box",
    data:{
        msg:100
    }
})
101

但是在Mustache語(yǔ)法中不能是同語(yǔ)句。例如:

{{var a = 1}}

這個(gè)語(yǔ)句就不會(huì)被執(zhí)行。

指令

指令(Directives)是帶有 v- 前綴的特殊屬性。指令屬性的值預(yù)期是單個(gè) JavaScript 表達(dá)式(v-for 是例外情況,稍后我們?cè)儆懻摚?。指令的職?zé)是,當(dāng)表達(dá)式的值改變時(shí),將其產(chǎn)生的連帶影響,響應(yīng)式地作用于 DOM。

{{msg}}
var vm = new Vue({
    el:"#box",
    data:{
        msg:"汪派傳人",
        seen:false
    }
})
汪派傳人

當(dāng)我們更改了seen為false時(shí),div不會(huì)被顯示。

參數(shù)

一些指令能夠接收一個(gè)"參數(shù)",在指令名稱(chēng)之后以冒號(hào)表示,例如上面哦我們使用過(guò)的V-bind指令。

在這里disabled是參數(shù),告知 v-bind 指令將該元素的 disabled 屬性與表達(dá)式 isButtonDisabled 的值綁定。
另一個(gè)例子是 v-on 指令,它用于監(jiān)聽(tīng) DOM 事件:

修飾符

修飾符(Modifiers)是以半角句號(hào) . 指明的特殊后綴,用于指出一個(gè)指令應(yīng)該以特殊方式綁定。例如,.prevent 修飾符告訴 v-on 指令對(duì)于觸發(fā)的事件調(diào)用 event.preventDefault():

{{msg}}

在js中,我們?cè)赩ue實(shí)例中使用methods屬性使用修飾符

var vm = new Vue({
    el:"#box",
    data:{
        msg:"汪派傳人",
    },
    methods:{
        a:function(){
            console.log("執(zhí)行")
        }
    }
})

控制臺(tái)打印

執(zhí)行
過(guò)濾器

Vue.js 允許你自定義過(guò)濾器,可被用作一些常見(jiàn)的文本格式化。過(guò)濾器可以用在兩個(gè)地方:mustache 插值和 v-bind 表達(dá)式。過(guò)濾器應(yīng)該被添加在 JavaScript 表達(dá)式的尾部,由“管道”符指示:

{{msg|fangfa}}

在js中,我們?cè)赩ue實(shí)例中使用filters屬性使用修飾符

var vm = new Vue({
    el:"#box",
    data:{
        msg:"vue.js",
    },
    filters:{
        fangfa:function(value){
            console.log(value)
            return value.split("").reverse().join("")
        }
    },
})
sj.euv

過(guò)濾器可以串聯(lián),例如

{{msg|fangfa}}
var vm = new Vue({
    el:"#box",
    data:{
        msg:"vue.js",
    },
    filters:{
        fangfa:function(value){
            console.log(value)
            return value.split("").reverse().join("")
        },
        fangfa2:function(value){
                return value.split("").reverse().join("")
            }
    },
})
vue.js

過(guò)濾器是 JavaScript 函數(shù),因此可以接收參數(shù):

{{ msg | fangfa("arg1", arg2) }}

這里,fangfa 被定義為接收三個(gè)參數(shù)的過(guò)濾器函數(shù)。其中 msg 的值作為第一個(gè)參數(shù),普通字符串 "arg1" 作為第二個(gè)參數(shù),表達(dá)式 arg2 取值后的值作為第三個(gè)參數(shù)。

縮寫(xiě)

v- 前綴作為一種視覺(jué)提示,用來(lái)識(shí)別模板中 Vue 特定的特性。當(dāng)你在使用 Vue.js 為現(xiàn)有標(biāo)簽添加動(dòng)態(tài)行為(dynamic behavior)時(shí),v- 前綴很有幫助,然而,對(duì)于一些頻繁用到的指令來(lái)說(shuō),就會(huì)感到使用繁瑣。同時(shí),在構(gòu)建由 Vue.js 管理所有模板的單頁(yè)面應(yīng)用程序(SPA - single page application)時(shí),v- 前綴也變得沒(méi)那么重要了。因此,Vue.js 為 v-bind 和 v-on 這兩個(gè)最常用的指令,提供了特定簡(jiǎn)寫(xiě):

v-bind 縮寫(xiě)

用一個(gè) : 表示



v-on 縮寫(xiě)

用@表示



計(jì)算屬性 實(shí)例

{{reversedmsg}}

var vm = new Vue({
    el:"#box",
    data:{
        msg:"abcd"
    },
    computed:{
        reversedmsg:function(){
            return this.msg.split("").reverse().join("")
        }
    }
})
dcba
計(jì)算屬性的緩存 vs method 方法 計(jì)算屬性的緩存

計(jì)算屬性是基于它們的依賴(lài)進(jìn)行緩存的。計(jì)算屬性只有在它的相關(guān)依賴(lài)發(fā)生改變時(shí)才會(huì)重新求值。這就意味著只要 msg 還沒(méi)有發(fā)生改變,多次訪(fǎng)問(wèn) reversedmsg 計(jì)算屬性會(huì)立即返回之前的計(jì)算結(jié)果,而不必再次執(zhí)行函數(shù)。

口說(shuō)無(wú)憑,下面我們測(cè)試一下他是否具有緩存

{{resversedmsg}}

{{resversedmsg}}

{{resversedmsg}}

{{resversedmsg}}

var a = 1;
var vm = new Vue({
    el:"#box",
    data:{
        msg:"abcd"
    },
    computed:{
        resversedmsg:function(){
            a++;
            return a
        }
    }
})
2
2
2
2

resversedmsg第一次調(diào)用時(shí),a++;這時(shí)a=2,第二次調(diào)用時(shí),結(jié)果是2;這就證明了我們剛說(shuō)的只有第一次調(diào)用時(shí)進(jìn)行計(jì)算,而以后的調(diào)用因?yàn)閙sg沒(méi)有改變,所以直接調(diào)用了緩存的數(shù)據(jù)。

method

{{remsg()}}

{{remsg()}}

{{remsg()}}

{{remsg()}}

var a = 1;
var vm = new Vue({
    el:"#box",
    data:{
        msg:"abcd"
    },
    methods: {
    remsg: function () {
        a++,
        return a
        }
    }
})
2
3
4
5

這就說(shuō)明了 method 相比 計(jì)算屬性 來(lái)說(shuō),假設(shè)我們有一個(gè)性能開(kāi)銷(xiāo)比較大的的計(jì)算屬性 A,它需要遍歷一個(gè)極大的數(shù)組和做大量的計(jì)算。然后我們可能有其他的計(jì)算屬性依賴(lài)于 A 。如果沒(méi)有緩存,我們將不可避免的多次執(zhí)行 A 的 getter!如果你不希望有緩存,請(qǐng)用 method 替代。

計(jì)算屬性 vs watched屬性 watched屬性監(jiān)聽(tīng)

Vue 確實(shí)提供了一種更通用的方式來(lái)觀察和響應(yīng) Vue 實(shí)例上的數(shù)據(jù)變動(dòng):watch 屬性。當(dāng)你有一些數(shù)據(jù)需要隨著其它數(shù)據(jù)變動(dòng)而變動(dòng)時(shí),你很容易濫用 watch。通常更好的想法是使用 computed 屬性而不是命令式的 watch 回調(diào)。

{{msg3}}

var vm = new Vue({
    el:"#box",
    data:{
        msg:"abcd",
        msg1:1,
        msg2:2,
        msg3:3,
    },
    watch:{
        msg1:function(val){
            this.msg3=val+this.msg2
        }
        msg2:function(val){
            this.msg3=this.msg1+val
        }
    }
})

然而我們會(huì)發(fā)現(xiàn)我們還可以用計(jì)算屬性來(lái)控制msg3的改變

var vm = new Vue({
    el:"#box",
    data:{
        msg:"abcd",
        msg1:1,
        msg2:2,
        // msg3:3,
    },
    computed: {
        msg3: {
        function () {
                return this.msg1 + this.msg2
            }    
        }
    } 
})
計(jì)算 getter和setter

當(dāng)我們使用計(jì)算屬性時(shí),計(jì)算屬性默認(rèn)時(shí)getter(獲?。?不過(guò)我們有時(shí)還需要更改(setter)

computed: {
    msg3: {
        // getter
        get: function () {
            return this.msg1 + this.msg2
        },
        // setter
        set: function (newValue) {
                this.msg1=newValue
            }
    }
}

當(dāng)我們?cè)诳刂婆_(tái)上輸入vm.msg3=100時(shí),msg1也會(huì)隨之改變。

觀察 Watchers

雖然計(jì)算屬性在大多數(shù)情況下更合適,但有時(shí)也需要一個(gè)自定義的 watcher。

var vm = new Vue({
    el: "#box",
    data: {
        question: "",
        answer: "I cannot give you an answer until you ask a question!"
    },
  watch: {
    // 如果 question 發(fā)生改變,這個(gè)函數(shù)就會(huì)運(yùn)行
    question: function (newQuestion) {
        this.answer = "Waiting for you to stop typing..."
        this.getAnswer()
    }
  }
});

在這個(gè)實(shí)例中,watchers會(huì)監(jiān)聽(tīng)data里的question屬性,當(dāng)question發(fā)生改變時(shí),answer會(huì)發(fā)生改變。
使用 watch 選項(xiàng)允許我們執(zhí)行異步操作 (訪(fǎng)問(wèn)一個(gè) API),限制我們執(zhí)行該操作的頻率,并在我們得到最終結(jié)果前,設(shè)置中間狀態(tài)。這是計(jì)算屬性無(wú)法做到的。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85099.html

相關(guān)文章

  • vue-cli “從入門(mén)到放棄”

    摘要:主要作用目錄結(jié)構(gòu)本地調(diào)試代碼部署熱加載單元測(cè)試在如今前端技術(shù)飛速發(fā)展的時(shí)代,和作為前端框架已經(jīng)呈現(xiàn)出了三國(guó)鼎立的局面。 主要作用:目錄結(jié)構(gòu)、本地調(diào)試、代碼部署、熱加載、單元測(cè)試 在如今前端技術(shù)飛速發(fā)展的時(shí)代,angular.js、vue.js 和 react.js 作為前端框架已經(jīng)呈現(xiàn)出了三國(guó)鼎立的局面。作為國(guó)人若你不知道 vue,小生表示可以理解,如果作為中國(guó)的前端猿不知道 vue,...

    DrizzleX 評(píng)論0 收藏0
  • vue-cli “從入門(mén)到放棄”

    摘要:主要作用目錄結(jié)構(gòu)本地調(diào)試代碼部署熱加載單元測(cè)試在如今前端技術(shù)飛速發(fā)展的時(shí)代,和作為前端框架已經(jīng)呈現(xiàn)出了三國(guó)鼎立的局面。 主要作用:目錄結(jié)構(gòu)、本地調(diào)試、代碼部署、熱加載、單元測(cè)試 在如今前端技術(shù)飛速發(fā)展的時(shí)代,angular.js、vue.js 和 react.js 作為前端框架已經(jīng)呈現(xiàn)出了三國(guó)鼎立的局面。作為國(guó)人若你不知道 vue,小生表示可以理解,如果作為中國(guó)的前端猿不知道 vue,...

    william 評(píng)論0 收藏0
  • vue-cli “從入門(mén)到放棄”

    摘要:主要作用目錄結(jié)構(gòu)本地調(diào)試代碼部署熱加載單元測(cè)試在如今前端技術(shù)飛速發(fā)展的時(shí)代,和作為前端框架已經(jīng)呈現(xiàn)出了三國(guó)鼎立的局面。 主要作用:目錄結(jié)構(gòu)、本地調(diào)試、代碼部署、熱加載、單元測(cè)試 在如今前端技術(shù)飛速發(fā)展的時(shí)代,angular.js、vue.js 和 react.js 作為前端框架已經(jīng)呈現(xiàn)出了三國(guó)鼎立的局面。作為國(guó)人若你不知道 vue,小生表示可以理解,如果作為中國(guó)的前端猿不知道 vue,...

    Joyven 評(píng)論0 收藏0
  • 你想知道vue實(shí)例

    摘要:如果在實(shí)例創(chuàng)建之后添加新的屬性到實(shí)例上,它不會(huì)觸發(fā)視圖更新。在配置數(shù)據(jù)觀測(cè)編譯模板掛載實(shí)例到,然后在數(shù)據(jù)變化時(shí)更新的過(guò)程中,實(shí)例會(huì)調(diào)用一些生命周期鉤子。 vue的實(shí)例 vue構(gòu)造器 每個(gè)Vue.js應(yīng)用都是通過(guò) 構(gòu)造函數(shù)Vue 創(chuàng)建一個(gè) Vue的根實(shí)例 啟動(dòng)的: 我們首先復(fù)習(xí)一下構(gòu)造函數(shù) function a(){ } // 當(dāng)一個(gè)函數(shù)用來(lái)創(chuàng)建一個(gè)實(shí)例的時(shí)候,就叫做構(gòu)造函數(shù) // 我們...

    dendoink 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<