Vue 2.0指令介紹

live-server使用

npm install live-server -g
live-server

一、v-if & v-show

示例:
v-if

<div id="app">
<div v-if="isLogin">你好!Fang</div>
</div>
<script>
let app = new Vue({
  el: '#app',
  data: {
    isLogin:true
  }
})
</script>

這里我們在vue的data里定義了isLogin的值,當它為true時,網頁就會顯示:你好!Fang,如果為false時,就顯示請登錄后操作。

v-show
調整css中display屬性,DOM已經加載,只是CSS控制沒有顯示出來。

<div v-show="isLogin">你好:JSPang</div>

v-if 和v-show的區別:
v-if: 判斷是否加載,可以減輕服務器的壓力,在需要時加載。
v-show:調整css dispaly屬性,可以使客戶端操作更加流暢

二、v-for使用:

基本用法:
<body>
    <div id="app">
       <ul>
           <li v-for="item in items">
                {{item}}
           </li>
       </ul>
    </div>

    <script>
        var app=new Vue({
            el:'#app',
            data:{
                items:[20,23,18,65,32,19,54,56,41]
            }
        })
    </script>
</body>

這是一個最基礎的循環,先在js里定義了items數組,然后在模板中用v-for循環出來,需要注意的是,你需要那個html標簽循環,v-for就寫在那個上邊。

數組如何排序:
我們已經順利的輸出了我們定義的數組,但是我需要在輸出之前給數組排個序,那我們就用到了Vue的computed:屬性。

computed:{
    sortItems:function(){
          return this.items.sort();
    }
} 

我們在computed里新聲明了一個對象sortItems,如果不重新聲明會污染原來的數據源,這是Vue不允許的,所以你要重新聲明一個對象。

若只用sort方法是得不到想要的數據的,我們可以自己編寫一個方法sortNumber,然后傳給我們的sort函數

computed:{
    sortItems:function(){
          return this.items.sort(sortNumber);
    }
} 

function sortNumber(a,b){
       return a-b
  }
依次輸出:
18
19
20
23
32
41
54
56
65
對象循環輸出:

首先得定義一個數組,數組里邊是對象數據

students:[
  {name:'jspang',age:32},
  {name:'Panda',age:30},
  {name:'PanPaN',age:21},
  {name:'King',age:45}
]

在模板中輸出

<ul>
   <li v-for="student in students">
       {{student.name}} - {{student.age}}
   </li>
</ul>

加入索引序號

<ul>
  <li v-for="(student,index) in students">
    {{index}}:{{student.name}} - {{student.age}}
  </li>
</ul>

排序,我們先加一個原生的對象形式的數組排序方法

//數組對象方法排序:
function sortByKey(array,key){
    return array.sort(function(a,b){
      var x=a[key];
      var y=b[key];
      return ((x<y)?-1:((x>y)?1:0));
   });
}

有了數組的排序方法,在computed中進行調用排序

sortStudent:function(){
     return sortByKey(this.students,'age');
}

三、v-text & v-html

<div id="app">
    <span>{{ message }}</span> = <span v-text="message"></span><br/>
    //如果在javascript中寫有html標簽,用v-text是輸出不出來的,這時候我們就需要用v-html標簽
    <span v-html="msgHtml"></span>
</div>

<script>
    var app=new Vue({
        el:'#app',
        data:{
            message:'hello Vue!',
            msgHtml:'<h2>hello Vue!</h2>'
        }
    })
</script>

注:在生產環境中動態渲染HTML是非常危險的,因為容易導致XSS攻擊。所以只能在可信的內容上使用v-html,永遠不要在用戶提交和可操作的網頁上使用。

四、v-model指令

1、一個最簡單的雙向數據綁定代碼:

<div id="app">
原始文本信息:{{message}}
<br>
<h3>文本框</h3>

<p>v-model:
  <input type="text" v-model="message">
</p>
<p>v-model.lazy:
  <input type="text" v-model.lazy="message">
</p>
<p>v-model.number:
  <input type="text" v-model.number="message">
</p>
<p>v-model.trim:
  <input type="text" v-model.trim="message">
</p>
//JS
var app=new Vue({
  el:'#app',
  data:{
       message:'hello Vue!'
  }
 })

輸出:
文本框里的內容改變原始文本信息跟著改變

簡單雙向數據綁定

修飾符

  • .lazy:取代 imput 監聽 change 事件。
  • .number:輸入字符串轉為數字。
  • .trim:輸入去掉首尾空格。

2、文本區域加入數據綁定

<h3>文本域</h3>
    <textarea cols="30" rows="10" v-model="message"></textarea>

//JS
var app=new Vue({
  el:'#app',
  data:{
       message:'hello Vue!'
  }
 })

輸出:


文本域

3、多選按鈕綁定一個值

<h3>多選框綁定一個值</h3>
<input type="checkbox" id="isTrue" v-model="isTrue">
<label for="isTrue">{{isTrue}}</label>
//JS
var app=new Vue({
  el:'#app',
  data:{
      isTrue: true
  }
 }

輸出:


多選框綁定

4、多選綁定一個數組

<h3>多選框綁定數組</h3>
<p>
  <input type="checkbox" id="Fang" value="Fang" v-model="webNames">
  <label for="isTrue">Fang</label>
  <input type="checkbox" id="Frank" value="Frank" v-model="webNames">
  <label for="isTrue">Frank</label>
  <input type="checkbox" id="Alice" value="Alice" v-model="webNames">
  <label for="isTrue">Alice</label>
</p>
 //JS
var app=new Vue({
  el:'#app',
  data:{
      webNames:[]
  }
 }

輸出:

多選框綁定數組

5、單選按鈕綁定數據

<h3>單選框綁定</h3>
<p>
  <input type="radio" id="one" value="男" v-model="sex">
  <label for="one">男</label>
  <input type="radio" id="two" value="女" v-model="sex">
  <label for="one">女</label>
  <br>
  你選擇的性別是:{{sex}}
</p>
//JS
var app=new Vue({
  el:'#app',
  data:{
      sex:''
  }
 }

輸出:

單選按鈕綁定數據

五、v-on事件監聽

兩種綁定方法:
- v-on:click
<button v-on:click="bonusPoint">加分</button>
- @click
<button @click="deduction">減分</button>

//html
<div id="app">
    本場比賽得分:{{count}} 
    <br/>
    <button v-on:click="bonusPoint">加分</button>
    <button @click="deduction">減分</button>
    
</div>

<script>
    var app=new Vue({
        el:'#app',
        data:{
            count:0
        },
        methods:{
          bonusPoint:function(){
            this.count++
          },
          deduction:function(){
            this.count--
          }
        }
    })
</script>

我們除了綁定click之外,我們還可以綁定其它事件,比如鍵盤回車事件v-on:keyup.enter,現在我們增加一個輸入框,然后綁定回車事件,回車后把文本框里的值加到我們的count上。
綁定事件寫法:

<input type="text" v-on:keyup.enter="onEnter" v-model="secondCount">
//綁定到鍵盤上的回車鍵
//JS代碼
onEnter:function(){
     this.count=this.count+parseInt(this.secondCount);
}

可以根據鍵值表定義鍵盤事件:點擊查看

六、v-bind指令

v-bind是處理HTML中的標簽屬性的,例如<div></div>就是一個標簽,<img>也是一個標簽,我們綁定<img>上的src進行動態賦值。

//html
<div id="app">
[圖片上傳失敗...(image-c7ccbb-1524291892651)]
</div>
//js
var app=new Vue({
    el:'#app',
    data:{
          imgSrc:'http://baidu.com/wp-content/uploads/2017/02/vue01-2.jpg'
     }
})

在html中我們用v-bind:src=”imgSrc”的動態綁定了src的值,這個值是在vue構造器里的data屬性中找到的。我們在data對象在中增加了imgSrc屬性來供html調用。

v-bind 縮寫

<!-- 完整語法 -->
<a v-bind:href="url"></a>
<!-- 縮寫 -->
<a :href="url"></a>

綁定CSS樣式
在工作中我們經常使用v-bind來綁定css樣式:
在綁定CSS樣式是,綁定的值必須在vue中的data屬性中進行聲明。
1、直接綁定class樣式

<div :class="className">1、綁定classA</div>
var app=new Vue({
    el:'#app',
    data:{
          className:'classA
     }

2、綁定classA并進行判斷,在isOK為true時顯示樣式,在isOk為false時不顯示樣式。

<div :class="{classA:isOk}">2、綁定class中的判斷</div>
  var app=new Vue({
    el:'#app',
    data:{
          isOK:false
     }

3、綁定class中的數組

<div :class="[classA,classB]">3、綁定class中的數組</div>
 var app=new Vue({
    el:'#app',
    data:{
         classA:'classA',
          classB:'classB'
     }

4、綁定class中使用三元表達式判斷

<div :class="isOk?classA:classB">4、綁定class中的三元表達式判斷</div>
var app=new Vue({
    el:'#app',
    data:{
         classA:'classA',
          classB:'classB'
     }

5、綁定style

<div :style="{color:red,fontSize:font}">5、綁定style</div>
var app=new Vue({
    el:'#app',
    data:{
          red:'red',
          font:'20px'
     }

6、用對象綁定style樣式

<div :style="styleObject">6、用對象綁定style樣式</div>
 //js
var app=new Vue({
   el:'#app',
   data:{
       styleObject:{
           fontSize:'24px',
           color:'green'
            }
        }
})

v-pre & v-cloak & v-once指令

v-pre指令
在模板中跳過vue的編譯,直接輸出原始值。就是在標簽中加入v-pre就不會輸出vue中的data值了。

<div v-pre>{{message}}</div>

這時并不會輸出我們的message值,而是直接在網頁中顯示{{message}}

v-cloak指令
在vue渲染完指定的整個DOM后才進行顯示。它必須和CSS樣式一起使用,

[v-cloak] {
  display: none;
}
<div v-cloak>
  {{ message }}
</div>

v-once指令
在第一次DOM時進行渲染,渲染完成后視為靜態內容,跳出以后的渲染過程。

<div v-once>{{message}}</div>
<div><input type="text" v-model="message"></div>
<div>{{message}}</div>

上面的div將不會隨著input值改變一起改變 只改變下面div

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容