Vue的基礎(chǔ)語法

Vue的基礎(chǔ)語法

一、插值操作

? 1.使用Mustache語法獲取data中的數(shù)據(jù)

示例:

<div id="app">
  <h2>{{firstName +" "+ lastName}}</h2>
  <h2>{{firstName}} {{lastName}}</h2>
</div>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      firstName:"Lebron",
      lastName:"James"
    }
  });
</script>

使用Mustache語法顯示在瀏覽器中的數(shù)據(jù)是響應(yīng)式的,若是data中的數(shù)據(jù)改變了,瀏覽器中顯示的數(shù)據(jù)也會動態(tài)的改變爹殊,這很好用丢习,若是從服務(wù)器中動態(tài)的獲取到數(shù)據(jù)顶掉,就不需要先獲得元素,再進行追加了。

? 2.有時候某些東西猴凹,我們不想要它響應(yīng)式的改變夷狰,這個時候可以使用v-once指令

<div id="app" v-once>{{message}}</div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        message: 'hello world!'
      }
    });
  </script>

可以打開控制臺,輸入app.message = "hello vue!",可以看見郊霎,雖然message的值修改了沼头,但是頁面顯示的數(shù)據(jù)并沒有動態(tài)的改變。

? 3.有時可能我們想要顯示的數(shù)據(jù)是一個html類型的數(shù)據(jù)歹篓,就像是含有html標(biāo)簽這樣子的數(shù)據(jù)瘫证,這個時候若是直接使用Mustache語法肯定解析不了html標(biāo)簽。這個時候就可以使用一個v-html指令庄撮,這就像是給這個元素添加了innerHTML值一樣背捌。

<div id="app" v-html="baidu"></div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        baidu:"<a 
      }
    });
  </script>

? 4.v-text指令和Mustache語法差不多,都是取出數(shù)據(jù)插入元素中洞斯,應(yīng)該就和innerText差不多吧毡庆。

<div id="app">
  <h2 v-text="message"></h2>
</div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
      message: 'Hello World!'
      }
    });
  </script>

? 5.v-pre指令應(yīng)該和pre標(biāo)簽差不多,使用了這個標(biāo)簽之后就不會對其中的文本進行語法的解析烙如。

<div id="app" v-pre>{{message}}</div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
      message: '你好呀'
      }
    });
  </script>

像是這串代碼在頁面中顯示的就是{{message}}而不是你好呀么抗,因為沒有進行Mustache語法的解析。

? 6.有時候亚铁,若是我們在準(zhǔn)備數(shù)據(jù)的時候需要花一定的時間蝇刀,而這個時候Mustache語法顯示的直接是語法格式的文本,然后會有個閃動后出現(xiàn)我們想要顯示的數(shù)據(jù)徘溢。這種情況對用戶來說體驗是非常不好的吞琐,所以還不如在加載完成之前先不要顯示呢。這個時候就可以使用到v-cloak指令然爆,cloak是斗篷的意思站粟,寓意在沒加載完成之前先使用斗篷把數(shù)據(jù)蓋起來,別讓用戶看到先曾雕。

<div id="app">{{message}}</div>
  <script src="../js/vue.js"></script>
  <script>
    setTimeout("const app = new Vue({\n" +
        "      el: '#app',\n" +
        "      data: {\n" +
        "      message: 'hello vue!'\n" +
        "      }\n" +
        "    });",1000);
  </script>

這串代碼就可以演示閃動的場景奴烙,你可以感受到,的確不是很友好剖张。

?

<style>
    [v-cloak]{
      display: none;
    }
  </style>
</head>
<body>
<div id="app" v-cloak>{{message}}</div>
  <script src="../js/vue.js"></script>
  <script>
    setTimeout("const app = new Vue({\n" +
        "      el: '#app',\n" +
        "      data: {\n" +
        "      message: 'hello vue!'\n" +
        "      }\n" +
        "    });",1000);
  </script>

結(jié)合style屬性選擇器切诀,當(dāng)app加載完成之后它會把v-cloak給去掉,就是拿走斗篷搔弄,底下的數(shù)據(jù)就顯示出來了趾牧。

通過上面的指令和Mustache語法,我們能夠動態(tài)的更新元素中的文本內(nèi)容肯污,但是有的時候像是a標(biāo)簽中的href翘单,img標(biāo)簽中的src吨枉,我們也想要動態(tài)的進行更新,這就需要進行動態(tài)綁定屬性操作哄芜。

二貌亭、動態(tài)綁定屬性操作

? 1.v-bind用于綁定一個或者多個屬性值

示例:動態(tài)綁定a標(biāo)簽的href和img標(biāo)簽的src

<div id="app">
  <a v-bind:href="linkVue">vue官網(wǎng)</a>
  <img v-bind:src="vueLogo" alt="">
</div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        linkVue:"https://cn.vuejs.org/",
        vueLogo:"https://cn.vuejs.org/images/logo.png"
      }
    });
  </script>

v-bind有個語法糖寫法,就是為了簡化它的書寫认臊,給各位程序員一點甜頭的意思圃庭。語法糖寫法就是直接一個":"

<div id="app">
  <a :href="linkVue">vue官網(wǎng)</a>
  <img :src="vueLogo" alt="">
</div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        linkVue:"https://cn.vuejs.org/",
        vueLogo:"https://cn.vuejs.org/images/logo.png"
      }
    });
  </script>

這就是語法糖寫法,結(jié)果沒有變化失晴。

? 2. v-bind綁定class剧腻,很多時候我們會希望動態(tài)的切換class,比如說音樂的點擊和關(guān)閉等等涂屁。v-bind綁定class有兩種方式书在,分別是對象語法和數(shù)組語法

? 2.1 v-bind綁定class,對象語法

對象語法簡述:

<div id="app">
  <h2 v-bind:class="{active:true,line:false}">{{message}}</h2>
</div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
      message: '為了部落2鹩帧H逖!'
      }
    });
  </script>

v-bind綁定class的對象語法就是像這樣以鍵值對的方式帖族,不過value是一個布爾值栈源,表示這個class是否添加上去。

<div id="app">
  <h2 v-bind:class="{active:isActive,line:isLine}">{{message}}</h2>
</div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        message: '為了部落J恪I蹩选!',
        isActive:true,
        isLine:false
      }
    });
  </script>

這樣就能動態(tài)的添加或者刪除該類了

下面例子演示涣雕,點擊文字切換紅色艰亮。

<div id="app">
  <h2 v-bind:class="{active:isActive,line:isLine}" v-on:click="textClick">{{message}}</h2>
</div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        message: '為了部落!0贰垃杖!',
        isActive:true,
        isLine:false
      },
      methods:{
        textClick:function () {
          this.isActive = !this.isActive;
        }
      }
    });
  </script>

vue這個響應(yīng)式的設(shè)計真的很方便男杈,很好玩丈屹。

2.2v-bind綁定class,數(shù)組語法

<h2 v-bind:class="[active,line]">{{message}}</h2>
  <h2 v-bind:class="getClass()">{{message}}</h2>
  <h2 v-bind:class="classes">{{message}}</h2>
</div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        message: '你好啊,李銀河!',
        active:"sdfdsfsdf",
        line:"sdfsdf"
      },
      methods:{
        getClass:function () {
          return [this.active,this.line];
        }
      },
      computed:{
        classes:function () {
          return [this.active,this.line];
        }
      }
    });
  </script>

這就是數(shù)組語法綁定class伶棒,注意數(shù)組中的元素不能加單引號旺垒,不然就當(dāng)作字符串而不是變量解析了》粑蓿可能你會覺得直接寫在class中有點長了先蒋,那么可以用一個函數(shù)或者計算屬性來獲取。

  1. v-bind綁定style宛渐,同樣也有對象語法和數(shù)組語法竞漾,這里就一起展示了

    <div id="app">
      <h2 v-bind:style="{fontSize:font + 'px',color:color}">{{message}}</h2>
      <h2 v-bind:style="[myFontSize,myColor]">{{message}}</h2>
      <h2 v-bind:style="[finalFontSize,finalColor]">{{message}}</h2>
    </div>
      <script src="../js/vue.js"></script>
      <script>
        const app = new Vue({
          el: '#app',
          data: {
            message: '你好啊眯搭,李銀河!',
            font:50,
            color:'red',
            myFontSize:{fontSize:50+'px'},
            myColor:{color:'red'}
          },
          computed:{
            finalFontSize:function () {
              return {fontSize:this.font+"px"};
            },
            finalColor:function () {
              return {color:this.color};
            }
          }
        });
      </script>
    

三、計算屬性

有些時候我們想展示的數(shù)據(jù)不只是一個业岁,而是多個數(shù)據(jù)進行一定的處理之后再展示的鳞仙,這時候直接使用Mustache語法的話可能無法滿足需求,所以vue中有個叫做計算屬性的東西笔时,就是上面例子中我在computed中定義的函數(shù)棍好,這些雖然是函數(shù),但是它起到的效果是和屬性差不多的允耿,調(diào)用的時候不需要加小括號借笙。

下面就以一個計算書本總價格的例子來使用一下吧。

<div id="app">
  <h2>總價格:{{totalPrice}}</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      books: [
        {id: 110, name: 'Unix編程藝術(shù)', price: 119},
        {id: 111, name: '代碼大全', price: 105},
        {id: 112, name: '深入理解計算機原理', price: 98},
        {id: 113, name: '現(xiàn)代操作系統(tǒng)', price: 87},
      ]
    },
    computed: {
      totalPrice:function () {
        let total = 0;
        for(let i = 0;i < this.books.length;i++){
          total += this.books[i].price;
        }
        //這種for循環(huán)取出來的i是books中的指定下標(biāo)的元素较锡,就和forEach差不多
        // for(let i of this.books){
        //   total += i.price;
        // }
        
        //這種for循環(huán)取出來的i是下標(biāo)业稼,就和for(let i = 0;i < this.books.length;i++)差不多
        // for(let i in this.books){
        //   total += this.books[i].price;
        // }
        return total;
      }
    }
  })
</script>
計算屬性的setter和getter

其實上面的例子是一個簡化的寫法,按照javabean的思想念链,一個屬性是要有set和get方法的盼忌,這里其實也是這樣,不過一般只是作為數(shù)據(jù)展示掂墓,不希望進行改變數(shù)據(jù)的值谦纱,所以就省略的set方法。

<div id="app">
  <h2>{{fullName}}</h2>
</div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        firstName:"Lebron",
        lastName:"James"
      },
      computed:{
        fullName:{
          set(fullName){
            let names = fullName.split(" ");
            this.firstName = names[0];
            this.lastName = names[1];
          },
          get(){
            return this.firstName + " " + this.lastName;
          }
        }
      }
    });
  </script>
為什么在數(shù)據(jù)展示的時候推薦使用計算屬性而不是方法呢君编?

這涉及到計算屬性的設(shè)計跨嘉,因為計算屬性是具有緩存的,多次調(diào)用其實只是執(zhí)行了一次吃嘿,而方法沒有緩存祠乃,調(diào)用了多少次就執(zhí)行了多少次,這就產(chǎn)生了性能和效率上的浪費兑燥。

<div id="app">
  <h2>{{fullName}}</h2>
  <h2>{{fullName}}</h2>
  <h2>{{fullName}}</h2>
  <h2>{{fullName}}</h2>
  <h2>{{fullName}}</h2>
  <h2>{{fullName}}</h2>
  <h2>{{getFullName()}}</h2>
  <h2>{{getFullName()}}</h2>
  <h2>{{getFullName()}}</h2>
  <h2>{{getFullName()}}</h2>
  <h2>{{getFullName()}}</h2>
  <h2>{{getFullName()}}</h2>
  <h2>{{getFullName()}}</h2>
  <h2>{{getFullName()}}</h2>
</div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        firstName : "Lebron",
        lastName : "James"
      },
      computed:{
        fullName(){
          console.log("the computed is running...");
          return this.firstName + " " + this.lastName;
        }
      },
      methods:{
        getFullName(){
          console.log("the method is running...");
          return this.firstName + " " + this.lastName;
        }
      }
    });
  </script>

打開控制臺亮瓷,可以看見每調(diào)用一次方法,方法就會執(zhí)行一次降瞳。而計算屬性只會執(zhí)行一次嘱支,兩個效率高下立分

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市挣饥,隨后出現(xiàn)的幾起案子除师,更是在濱河造成了極大的恐慌,老刑警劉巖扔枫,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汛聚,死亡現(xiàn)場離奇詭異,居然都是意外死亡短荐,警方通過查閱死者的電腦和手機倚舀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門叹哭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人痕貌,你說我怎么就攤上這事话速。” “怎么了芯侥?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵泊交,是天一觀的道長。 經(jīng)常有香客問我柱查,道長廓俭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任唉工,我火速辦了婚禮研乒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淋硝。我一直安慰自己雹熬,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布谣膳。 她就那樣靜靜地躺著竿报,像睡著了一般。 火紅的嫁衣襯著肌膚如雪继谚。 梳的紋絲不亂的頭發(fā)上烈菌,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機與錄音花履,去河邊找鬼芽世。 笑死,一個胖子當(dāng)著我的面吹牛诡壁,可吹牛的內(nèi)容都是我干的济瓢。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼妹卿,長吁一口氣:“原來是場噩夢啊……” “哼旺矾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起纽帖,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤宠漩,失蹤者是張志新(化名)和其女友劉穎举反,沒想到半個月后懊直,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡火鼻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年室囊,在試婚紗的時候發(fā)現(xiàn)自己被綠了雕崩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡融撞,死狀恐怖盼铁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尝偎,我是刑警寧澤饶火,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站致扯,受9級特大地震影響肤寝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抖僵,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一鲤看、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耍群,春花似錦义桂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至曹抬,卻和暖如春罢浇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沐祷。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工嚷闭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赖临。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓胞锰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親兢榨。 傳聞我的和親對象是個殘疾皇子嗅榕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

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

  • Vue 實例 屬性和方法 每個 Vue 實例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,221評論 0 6
  • 一、了解Vue.js 1.1.1 Vue.js是什么吵聪? 簡單小巧凌那、漸進式、功能強大的技術(shù)棧 1.1.2 為什么學(xué)習(xí)...
    蔡華鵬閱讀 3,336評論 0 3
  • 1. Vue 實例 1.1 創(chuàng)建一個Vue實例 一個 Vue 應(yīng)用由一個通過 new Vue 創(chuàng)建的根 Vue 實...
    王童孟閱讀 1,025評論 0 2
  • vue.js簡介 Vue.js讀音 /vju?/, 類似于 viewVue.js是前端三大新框架:Angular....
    LiWei_9e4b閱讀 509評論 0 0
  • vue學(xué)習(xí)筆記 安裝 Vue 提供一個官方命令行工具吟逝,可用于快速搭建大型單頁應(yīng)用帽蝶。只需幾分鐘即可創(chuàng)建并啟動一個帶熱...
    EL_PSY_CONGROO閱讀 1,066評論 0 5