天天看點

Vue學習記錄-- v-cloak,v-text,v-html,v-bind,v-on的基本使用

1.v-cloak

使用 v-cloak 防止頁面加載時出現 vuejs 的變量名

<div id="app">
    {{msg}}
</div>      

HTML 綁定 Vue執行個體,在頁面加載時會閃爍

Vue學習記錄-- v-cloak,v-text,v-html,v-bind,v-on的基本使用

v-cloak 可以解決這一問題,在 css 中加上

[v-cloak] {
  display: none;
}      

這段 CSS 的含義是,包含 v-cloak (cloak n. 披風,鬥篷;vt. 遮蓋,掩蓋) 屬性的 html 标簽在頁面初始化時會被隐藏。

Vue1.x 與 Vue2 中 v-cloak 的不同

Vue1 中,允許将 Vue 執行個體挂載在 body 上,而 Vue2 是不允許的,想對整個頁面執行個體化,需要另外用一個 div 來容納整個頁面内容,對其進行執行個體化

這樣在使用 v-cloak 時,同樣需要用到這種方法

為什麼我用的 v-cloak 無效?

在實際項目中,我們常通過 @import 來加載 css 檔案

@import "style.css"
@import "index.css"      

而 @import 是在頁面 DOM 完全載入後才會進行加載,如果我們将 [v-cloak] 寫在 @import 加載的 css 檔案中,就會導緻頁面仍舊閃爍。

為了避免這種情況,我們可以将 [v-cloak] 寫在 link 引入的 css 中,或者寫一個内聯 css 樣式,這樣就得到了解決。

2.v-text

​<p v-cloak> {{ msg }} </p>​

​​輸出的内容和​

​<h4 v-text="msg"></h4>​

​ 是一樣的,但是後者不會有閃爍問題

<h4 v-text="msg">==================</h4>      

該代碼浏覽器會先顯示 ==================,頁面加載完成後會顯示msg所代表的内容,也就是說v-text會覆寫元素中原本的内容

但以下代碼不同

<p v-cloak>++++++++ {{ msg }} ----------</p>      
Vue學習記錄-- v-cloak,v-text,v-html,v-bind,v-on的基本使用

插值表達式 隻會替換自己的這個占位符,不會把 整個元素的内容清空

3.v-html

當vue執行個體data裡面有HTML格式的代碼時

data: {
        msg: '123',
        msg2: '<h1>哈哈,我是一個大大的H1, 我大,我驕傲</h1>'
      }      

我們不想把msg2像msg一樣當成字元串輸出,那麼就用v-html

<div v-html="msg2"></div>      

div标簽之間也可以寫入文本,和v-text一樣,加載完畢後msg2所表示的東西會替代該文本。

4.v-bind

vue執行個體中

data: {
        msg: '123',
        msg2: '<h1>哈哈,我是一個大大的H1, 我大,我驕傲</h1>',
        mytitle: '這是一個自己定義的title'
      }      

下面第一行代碼,在網頁中滑鼠移動到按鈕時會顯示123,

第二三行代碼,會顯示 這是一個自己定義的title123,這裡用了v-bind

<input type="button" value="按鈕" title="123">
<input type="button" value="按鈕" v-bind:title="mytitle + '123'">
<input type="button" value="按鈕" :title="mytitle + '123'">  和上一行是等價的
<!-- v-bind: 是 Vue中,提供的用于綁定屬性的指令 -->
    <!-- 注意: v-bind: 指令可以被簡寫為 :要綁定的屬性 -->
    <!-- v-bind 中,可以寫合法的JS表達式 -->      

5.v-on

<!-- Vue 中提供了 v-on: 事件綁定機制 -->
     <input type="button" value="按鈕" :title="mytitle + '123'" v-on:click="alert('hello')">      

點選會彈出一個hello的對話框

<input type="button" value="按鈕" @click="show">      

vue執行個體中

methods: { // 這個 methods屬性中定義了目前Vue執行個體所有可用的方法
        show: function () {
          alert('Hello')
        }
      }      
document.getElementById('btn').onclick = function(){
      alert('Hello')      
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    [v-cloak] {
      /* display: none; */
    }
  </style>
</head>

<body>
  <div id="app">
    <!-- 使用 v-cloak 能夠解決 插值表達式閃爍的問題 -->
    <p v-cloak>++++++++ {{ msg }} ----------</p>
    <h4 v-text="msg">==================</h4>
    <!-- 預設 v-text 是沒有閃爍問題的 -->
    <!-- v-text會覆寫元素中原本的内容,但是 插值表達式  隻會替換自己的這個占位符,不會把 整個元素的内容清空 -->

    <div>{{msg2}}</div>
    <div v-text="msg2"></div>
    <div v-html="msg2">1212112</div>

    <!-- v-bind: 是 Vue中,提供的用于綁定屬性的指令 -->
    <!-- <input type="button" value="按鈕" v-bind:title="mytitle + '123'"> -->
    <!-- 注意: v-bind: 指令可以被簡寫為 :要綁定的屬性 -->
    <!-- v-bind 中,可以寫合法的JS表達式 -->

    <!-- Vue 中提供了 v-on: 事件綁定機制 -->
     <input type="button" value="按鈕" :title="mytitle + '123'" v-on:click="alert('hello')"> 


   <!-- <input type="button" value="按鈕" @click="show">-->
  </div>


  <script src="./lib/vue-2.4.0.js"></script>

  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        msg: '123',
        msg2: '<h1>哈哈,我是一個大大的H1, 我大,我驕傲</h1>',
        mytitle: '這是一個自己定義的title'
      },
      methods: { // 這個 methods屬性中定義了目前Vue執行個體所有可用的方法
        show: function () {
          alert('Hello')
        }
      }
    })


    /* document.getElementById('btn').onclick = function(){
      alert('Hello')
    } */
  </script>
</body>

</html>




<!-- 1. 如何定義一個基本的Vue代碼結構 -->
<!-- 2. 插值表達式 和  v-text   -->
<!-- 3. v-cloak -->
<!-- 4. v-html -->
<!-- 5. v-bind   Vue提供的屬性綁定機制   縮寫是 : -->
<!-- 6. v-on     Vue提供的事件綁定機制   縮寫是 @ -->