天天看點

vue基礎知識點

Vue.js

什麼是Vue.js

  • Vue.js 是目前最火的一個前端架構,React是最流行的一個前端架構(React除了開發網站,還可以開發手機App, Vue文法也是可以用于進行手機App開發的,需要借助于Weex)
  • Vue.js 是前端的主流架構之一,和Angular.js、React.js 一起,并成為前端三大主流架構!
  • Vue.js 是一套建構使用者界面的架構,隻關注視圖層,它不僅易于上手,還便于與第三方庫或既有項目整合。(Vue有配套的第三方類庫,可以整合起來做大型項目的開發)
  • 前端的主要工作?主要負責MVC中的V這一層;主要工作就是和界面打交道,來制作前端頁面效果;

為什麼要學習流行架構

  • 企業為了提高開發效率:在企業中,時間就是效率,效率就是金錢;
  • 提高開發效率的發展曆程:原生JS -> Jquery之類的類庫 -> 前端模闆引擎 -> Angular.js / Vue.js(能夠幫助我們減少不必要的DOM操作;提高渲染效率;雙向資料綁定的概念【通過架構提供的指令,我們前端程式員隻需要關心資料的業務邏輯,不再關心DOM是如何渲染的了】)
  • 在Vue中,一個核心的概念,就是讓使用者不再操作DOM元素,解放了使用者的雙手,讓程式員可以更多的時間去關注業務邏輯;

架構和庫的差別

  • 架構:是一套完整的解決方案;對項目的侵入性較大,項目如果需要更換架構,則需要重新架構整個項目。
  • 庫(插件):提供某一個小功能,對項目的侵入性較小,如果某個庫無法完成某些需求,可以很容易切換到其它庫實作需求。

Node(後端)中的 MVC 與 前端中的 MVVM 之間的差別

  • MVC 是後端的分層開發概念;
  • MVVM是前端視圖層的概念,主要關注于 視圖層分離,也就是說:MVVM把前端的視圖層,分為了 三部分 Model, View , VM ViewModel

Vue.js 基本代碼 和 MVVM 之間的對應關系

Vue 執行個體所控制的這個元素區域,就是我們的 V

new 出來的對象,就是我們 MVVM中的 VM排程者

這裡的 data 就是 MVVM中的 M,專門用來儲存 每個頁面的資料的

Vue之 -

基本的代碼結構

插值表達式

v-cloak

使用 v-cloak 能夠解決 插值表達式( 即{{ }} )閃爍的問題

(閃爍是 浏覽器先把{{}}顯示,加載完vue之後才渲染出内容的)

Vue指令之

v-text

v-html

預設 v-text 是沒有閃爍問題的 。

v-text會覆寫元素中原本的内容,但是 插值表達式 隻會替換自己的這個占位符,不會把 整個元素的内容清空。

v-html也會覆寫元素中原本的内容,但是會識别出HTML标簽。

v-bind

的三種用法

v-bind是 Vue中,提供的用于綁定屬性的指令,可以寫合法的JS表達式

  1. 直接使用指令

    v-bind:

  2. 使用簡化指令

    :

  3. 在綁定的時候,拼接綁定内容:

    :title="btnTitle + ', 這是追加的内容'"

v-on

跑馬燈效果

提供了 v-on:事件=“自己起的事件名” 事件綁定機制 簡化指令是@

v-on:click=“show”

事件如:click ,mouseover等等

跑馬燈效果

  1. HTML結構:
<div id="app">

    <p>{{info}}</p>

    <input type="button" value="開啟" v-on:click="go">

    <input type="button" value="停止" v-on:click="stop">

  </div>

           
  1. Vue執行個體:
// 建立 Vue 執行個體,得到 ViewModel
  // 注意:在 VM執行個體中,如果想要擷取 data 上的資料,或者 想要調用 methods 中的 方法,必須通過 this.資料屬性名  或  this.方法名 
  //進行通路,這裡的this,就表示 我們 new 出來的  VM 執行個體對象

    var vm = new Vue({

      el: '#app',

      data: {

        info: '猥瑣發育,别浪~!',

        intervalId: null

      },

      methods: {

        go() {

          // 如果目前有定時器在運作,則直接return

          if (this.intervalId != null) {

            return;

          }

          // 開始定時器
          // 箭頭函數  函數體内的this對象,就是定義時所在的對象,而不是使用時所在的對象

          this.intervalId = setInterval(() => {

            this.info = this.info.substring(1) + this.info.substring(0, 1);

          }, 500);

        },

        stop() {

          clearInterval(this.intervalId);

        }

      }

    });

           

事件修飾符:

  • .stop 阻止冒泡,隻執行目前事件

    隻要孩子和父親有相同的事件,當觸發該事件時就會一層一層向上冒。

  • .prevent 阻止預設事件
  • .capture 添加事件偵聽器時使用事件捕獲模式 (從外面到裡面觸發事件,和冒泡相反)
  • .self 隻當事件在該元素本身(比如不是子元素)觸發時觸發回調

    .self 隻會阻止自己身上冒泡行為的觸發,并不會真正阻止冒泡的行為

  • .once 事件隻觸發一次

v-model

雙向資料綁定

v-bind 隻能實作資料的單向綁定,從 M 自動綁定到 V, 無法實作資料的雙向綁定

v-model 指令,可以實作 表單元素和 Model 中資料的雙向資料綁定

v-model 隻能運用在 表單元素中

input(radio, text, address, email…) select checkbox textarea

簡易電腦案例

  1. HTML 代碼結構
<div id="app">

    <input type="text" v-model="n1">

    <select v-model="opt">

      <option value="0">+</option>

      <option value="1">-</option>

      <option value="2">*</option>

      <option value="3">÷</option>

    </select>

    <input type="text" v-model="n2">

    <input type="button" value="=" v-on:click="getResult">

    <input type="text" v-model="result">

  </div>

           
  1. Vue執行個體代碼:
// 建立 Vue 執行個體,得到 ViewModel

    var vm = new Vue({

      el: '#app',

      data: {

        n1: 0,

        n2: 0,

        result: 0,

        opt: '0'

      },

      methods: {

        getResult() {

          switch (this.opt) {

            case '0':

              this.result = parseInt(this.n1) + parseInt(this.n2);

              break;

            case '1':

              this.result = parseInt(this.n1) - parseInt(this.n2);

              break;

            case '2':

              this.result = parseInt(this.n1) * parseInt(this.n2);

              break;

            case '3':

              this.result = parseInt(this.n1) / parseInt(this.n2);

              break;
                    
          // 注意:這是投機取巧的方式,正式開發中,盡量少用
          //var codeStr = 'parseInt(this.n1) ' + this.opt + ' parseInt(this.n2)'
          //this.result = eval(codeStr)

          }

        }

      }

    });

           

在Vue中使用樣式

使用class樣式

  1. 直接傳遞一個數組,數組裡面是類名,類名必須用單引号括起來。注意: 這裡的 class 需要使用 v-bind 做資料綁定
<h1 :class="['red', 'thin']">這是一個邪惡的H1</h1>
           
  1. 數組中使用三元表達式
<h1 :class="['red', 'thin', isactive?'active':'']">這是一個邪惡的H1</h1>
isactive是data裡面的資料,為true才可以
           
  1. 數組中嵌套對象,提高代碼的可讀性
<h1 :class="['red', 'thin', {'active': isactive}]">這是一個邪惡的H1</h1>
isactive是data裡面的
           
  1. 直接使用對象

    在為 class 使用 v-bind 綁定 對象的時候,對象的屬性是類名,由于 對象的屬性可帶引号,也可不帶引号,是以 這裡我沒寫引号; 屬性的值 是一個辨別符

<h1 :class="{red:true, italic:true, active:true, thin:true}">這是一個邪惡的H1</h1>
           

使用内聯樣式

  1. 直接在元素上通過

    :style

    的形式,書寫樣式對象
<h1 :style="{color: 'red', 'font-size': '40px'}">這是一個善良的H1</h1>
屬性裡有-時候 ,需要加上引号
           
  1. 将樣式對象,定義到

    data

    中,并直接引用到

    :style

  • 在data上定義樣式:
data: {
        h1StyleObj: { color: 'red', 'font-size': '40px', 'font-weight': '200' }
}
           
  • 在元素中,通過屬性綁定的形式,将樣式對象應用到元素中:
<h1 :style="h1StyleObj">這是一個善良的H1</h1>
           
  1. :style

    中通過數組,引用多個

    data

    上的樣式對象
data: {
        h1StyleObj: { color: 'red', 'font-size': '40px', 'font-weight': '200' },
        h1StyleObj2: { fontStyle: 'italic' }
}
           
<h1 :style="[h1StyleObj, h1StyleObj2]">這是一個善良的H1</h1>
           

v-for

key

屬性

  1. 疊代數組
<ul>
  <li v-for="(item, i) in list">索引:{{i}} --- 姓名:{{item.name}} --- 年齡:{{item.age}}</li>
</ul>
           
  1. 疊代對象中的屬性
<!-- 循環周遊對象身上的屬性 -->
    <div v-for="(val, key, i) in userInfo">{{val}} --- {{key}} --- {{i}}</div>
           
  1. 疊代數字
注意:如果使用 v-for 疊代數字的話,前面的 count 值從 1 開始 
<p v-for="i in 10">這是第 {{i}} 個P标簽</p>

           
2.2.0+ 的版本裡,當在元件中使用 v-for 時,key 現在是必須的。

當 Vue.js 用 v-for 正在更新已渲染過的元素清單時,它預設用 “就地複用” 政策。如果資料項的順序被改變,Vue将不是移動 DOM 元素來比對資料項的順序, 而是簡單複用此處每個元素,并且確定它在特定索引下顯示已被渲染過的每個元素。

v-if

v-show