1. 程式人生 > >Vue.js基本程式碼及基本指令

Vue.js基本程式碼及基本指令

目錄

Tips

Tips

1.Vue初步使用

<!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>
  <!-- 1. 匯入Vue的包 -->
  <script src="./lib/vue-2.4.0.js"></script>
</head>

<body>
  <!-- 將來 new 的Vue例項,會控制這個 元素中的所有內容 -->
  <!-- Vue 例項所控制的這個元素區域,就是我們的 V  -->
  <div id="app">
    <p>{{ msg }}</p>
  </div>

  <script>
    // 2. 建立一個Vue的例項
    // 當我們匯入包之後,在瀏覽器的記憶體中,就多了一個 Vue 建構函式
    //  注意:我們 new 出來的這個 vm 物件,就是我們 MVVM中的 VM排程者
    var vm = new Vue({
      el: '#app',  // 表示,當前我們 new 的這個 Vue 例項,要控制頁面上的哪個區域
      // 這裡的 data 就是 MVVM中的 M,專門用來儲存 每個頁面的資料的
      data: { // data 屬性中,存放的是 el 中要用到的資料
        msg: '歡迎學習Vue' // 通過 Vue 提供的指令,很方便的就能把資料渲染到頁面上,程式設計師不再手動操作DOM元素了【前端的Vue之類的框架,不提倡我們去手動操作DOM元素了】
      }
    })
  </script>
</body>

</html>

2.Vue的基本表示式

 插值表示式 和  v-text  

    <p v-cloak>++++++++ {{ msg }} ----------</p>
    <h4 v-text="msg">==================</h4>

    v-text會覆蓋元素中原本的內容,但是 插值表示式  只會替換自己的這個佔位符,不會把 整個元素的內容清空

    v-cloak:使用 v-cloak 能夠解決 插值表示式閃爍的問題

    v-html:將msg中的內容當作html來解析

    v-bind   Vue提供的屬性繫結機制   縮寫是 :
    v-on     Vue提供的事件繫結機制   縮寫是 @

<!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>

3.幾點注意事項

注意:在 VM例項中,如果想要獲取 data 上的資料,或者 想要呼叫 methods 中的 方法,必須通過 this.資料屬性名  或  this.方法名 來進行訪問,這裡的this,就表示 我們 new 出來的  VM 例項物件

 VM例項,會監聽自己身上 data 中所有資料的改變,只要資料一發生變化,就會自動把 最新的資料,從data 上同步到頁面中去;【好處:程式設計師只需要關心資料,不需要考慮如何重新渲染DOM頁面】

4.事件修飾符

    使用  .stop  阻止冒泡
    <div class="inner" @click="div1Handler">
      <input type="button" value="戳他" @click.stop="btnHandler">
    </div>

    使用 .prevent 阻止預設行為
    <a href="http://www.baidu.com" @click.prevent="linkClick">有問題,先去百度</a>

    使用  .capture 實現捕獲觸發事件的機制
    <div class="inner" @click.capture="div1Handler">
      <input type="button" value="戳他" @click="btnHandler">
    </div>

    使用 .self 實現只有點選當前元素時候,才會觸發事件處理函式
    <div class="inner" @click="div1Handler">
      <input type="button" value="戳他" @click="btnHandler">
    </div>

    使用 .once 只觸發一次事件處理函式
    <a href="http://www.baidu.com" @click.prevent.once="linkClick">有問題,先去百度</a>


     .stop 和 .self 的區別
    <div class="outer" @click="div2Handler">
      <div class="inner" @click="div1Handler">
        <input type="button" value="戳他" @click.stop="btnHandler">
      </div>
    </div>

    .self 只會阻止自己身上冒泡行為的觸發,並不會真正阻止 冒泡的行為
    <div class="outer" @click="div2Handler">
      <div class="inner" @click.self="div1Handler">
        <input type="button" value="戳他" @click="btnHandler">
      </div>
    </div>

5.v-model指令的學習

    <!-- v-bind 只能實現資料的單向繫結,從 M 自動繫結到 V, 無法實現資料的雙向繫結  -->
    <!-- <input type="text" v-bind:value="msg" style="width:100%;"> -->

    <!-- 使用  v-model 指令,可以實現 表單元素和 Model 中資料的雙向資料繫結 -->
    <!-- 注意: v-model 只能運用在 表單元素中 -->
    <!-- input(radio, text, address, email....)   select    checkbox   textarea   -->
    <input type="text" style="width:100%;" v-model="msg">

6.Vue中的樣式

 6.1class:

  <style>
    .red {
      color: red;
    }

    .thin {
      font-weight: 200;
    }

    .italic {
      font-style: italic;
    }

    .active {
      letter-spacing: 0.5em;
    }
  </style>

    <!-- 第一種使用方式,直接傳遞一個數組,注意: 這裡的 class 需要使用  v-bind 做資料繫結 -->
    <!-- <h1 :class="['thin', 'italic']">這是一個很大很大的H1,大到你無法想象!!!</h1> -->

    <!-- 在陣列中使用三元表示式 -->
    <!-- <h1 :class="['thin', 'italic', flag?'active':'']">這是一個很大很大的H1,大到你無法想象!!!</h1> -->

    <!-- 在陣列中使用 物件來代替三元表示式,提高程式碼的可讀性 -->
    <!-- <h1 :class="['thin', 'italic', {'active':flag} ]">這是一個很大很大的H1,大到你無法想象!!!</h1> -->

    <!-- 在為 class 使用 v-bind 繫結 物件的時候,物件的屬性是類名,由於 物件的屬性可帶引號,也可不帶引號,所以 這裡我沒寫引號;  屬性的值 是一個識別符號 -->

  <script>
    // 建立 Vue 例項,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        flag: true,
        classObj: { red: true, thin: true, italic: false, active: false }
      },
      methods: {}
    });
  </script>

6.2 style

  <div id="app">
    <!-- 物件就是無序鍵值對的集合 -->
    <!-- <h1 :style="styleObj1">這是一個h1</h1> -->

    <h1 :style="[ styleObj1, styleObj2 ]">這是一個h1</h1>
  </div>

  <script>
    // 建立 Vue 例項,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        styleObj1: { color: 'red', 'font-weight': 200 },
        styleObj2: { 'font-style': 'italic' }
      },
      methods: {}
    });
  </script>

7.v-for

7.1迴圈普通陣列

 <div id="app">

    <p v-for="(item, i) in list">索引值:{{i}} --- 每一項:{{item}}</p>

  </div>

  <script>
    // 建立 Vue 例項,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        list: [1, 2, 3, 4, 5, 6]
      },
      methods: {}
    });
  </script>

7.2迴圈物件陣列

 <div id="app">
    <p v-for="(user, i) in list">Id:{{ user.id }} --- 名字:{{ user.name }} --- 索引:{{i}}</p>
  </div>

  <script>
    // 建立 Vue 例項,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        list: [
          { id: 1, name: 'zs1' },
          { id: 2, name: 'zs2' },
          { id: 3, name: 'zs3' },
          { id: 4, name: 'zs4' }
        ]
      },
      methods: {}
    });
  </script>

7.3迴圈物件

  <div id="app">
    <!-- 注意:在遍歷物件身上的鍵值對的時候, 除了 有  val  key  ,在第三個位置還有 一個 索引  -->
    <p v-for="(val, key, i) in user">值是: {{ val }} --- 鍵是: {{key}} -- 索引: {{i}}</p>
  </div>

  <script>
    // 建立 Vue 例項,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        user: {
          id: 1,
          name: '託尼·屎大顆',
          gender: '男'
        }
      },
      methods: {}
    });
  </script>

7.4迭代數字

  <div id="app">
    <!-- in 後面我們放過  普通陣列,物件陣列,物件, 還可以放數字 -->
    <!-- 注意:如果使用 v-for 迭代數字的話,前面的 count 值從 1 開始 -->
    <p v-for="count in 10">這是第 {{ count }} 次迴圈</p>
  </div>

  <script>
    // 建立 Vue 例項,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {}
    });
  </script>

7.5v-for中的key

    <!-- 注意: v-for 迴圈的時候,key 屬性只能使用 number獲取string -->
    <!-- 注意: key 在使用的時候,必須使用 v-bind 屬性繫結的形式,指定 key 的值 -->
    <!-- 在元件中,使用v-for迴圈的時候,或者在一些特殊情況中,如果 v-for 有問題,必須 在使用 v-for 的同時,指定 唯一的 字串/數字 型別 :key 值 -->

  <div id="app">

    <div>
      <label>Id:
        <input type="text" v-model="id">
      </label>

      <label>Name:
        <input type="text" v-model="name">
      </label>

      <input type="button" value="新增" @click="add">
    </div>

    <p v-for="item in list" :key="item.id">
      <input type="checkbox">{{item.id}} --- {{item.name}}
    </p>
  </div>

  <script>
    // 建立 Vue 例項,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        id: '',
        name: '',
        list: [
          { id: 1, name: '李斯' },
          { id: 2, name: '嬴政' },
          { id: 3, name: '趙高' },
          { id: 4, name: '韓非' },
          { id: 5, name: '荀子' }
        ]
      },
      methods: {
        add() { // 新增方法
          this.list.unshift({ id: this.id, name: this.name })
        }
      }
    });
  </script>

8.v-if和v-show

    <!-- v-if 的特點:每次都會重新刪除或建立元素 -->
    <!-- v-show 的特點: 每次不會重新進行DOM的刪除和建立操作,只是切換了元素的 display:none 樣式 -->

    <!-- v-if 有較高的切換效能消耗 -->
    <!-- v-show 有較高的初始渲染消耗 -->

    <!-- 如果元素涉及到頻繁的切換,最好不要使用 v-if, 而是推薦使用 v-show -->
    <!-- 如果元素可能永遠也不會被顯示出來被使用者看到,則推薦使用 v-if -->

  <div id="app">

    <!-- <input type="button" value="toggle" @click="toggle"> -->
    <input type="button" value="toggle" @click="flag=!flag">
    <h3 v-if="flag">這是用v-if控制的元素</h3>
    <h3 v-show="flag">這是用v-show控制的元素</h3>

  </div>

  <script>
    // 建立 Vue 例項,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        flag: false
      },
      methods: {
        /* toggle() {
          this.flag = !this.flag
        } */
      }
    });
  </script>