1. 程式人生 > >VUE快速入門,實用部分

VUE快速入門,實用部分

     首先了解JQuery和Vue.js都是前端js庫。但是側重點不一樣,Jquery重點在於很靈活地操作DOM元素以及Ajax請求。然而,Vue.js的重點在於資料和DOM元素的繫結關係,最方便的地方是大量運用到ajax做頁面渲染的時候,非常快捷和方便。所以JQuery和Vue.js混合使用,簡直是爽到爆炸!我用JQuery做ajax請求,用Vue資料和DOM繫結,以及Jquery對DOM的簡單操作,讓程式碼變得更加簡潔。  

     舉一個簡單的例子,大家可以對比一下,假如不用Vue.js渲染大量的ajax請求頁面的純JQuery操作DOM。看看有什麼區別。

    現在我們有一個需求, 分頁顯示資料。但是採用ajax的形式,就像手機一樣。想要顯示更多資料,點選"更多"...

其實也是分頁的一個變種,不太像原始分頁  "首頁   1   2  3   4  尾頁 "。體驗效果也會很好。

    下面分別對比純 JQuery和Vue.js對這個需求的處理,是怎麼做的。

     先來JQuery的版本:  在ul中新增li   模擬資料

 <div id="page">
         <ul id="show_page">
              
         <ul>
     </div>
   <button id="more">更多</button>

    
<script>

   $(function(){

          var lis= [1,2,3,4,5] ;//原來li要顯示的陣列資料

          //此時獲取到假如 點選更多  多顯示一個 變為   6
         //整體會變為  1 2 3 4 5 6

        //點選事件
         $("#more").click(function(){

              $.post(url,data,function(data,status){
      
            var  getData = data;//  6

            //往ul裡面追加子元素
            $("#show_page").append("<li>"+getData+"</li>");

}).

          });
 
    });


</script>

         Vue.js的處理方式。
<div id="page">
         <ul id="show_page">
            <li v-for="li in lis" >{{li}}</li>   <!--迴圈列印資料-->
         <ul>
     </div>
<button  v-on:click="getData" id="more">更多</button>  <!--繫結事件-->

<script>

   $(function(){
   
      var data  = [1,2,3,4,5];//原來li要顯示的陣列資料

      var page = new Vue(
        {
	  el:'#page',
	  data:{
	    lis:data   //把data賦值給lis
	  },
	  methods:{
	     getData:function(){
	        
		$(url,data2,function(getData,status){
		
		     this.lis.push(getData);   //往 lis陣列放資料
		});	
	     }
	  }
	}
      );
      

   })

</script>

          有人可能覺得,好像Vue.js似乎好像也不能減少程式碼,好像還比JQuery多了。這只是一個簡單測試,看不出來有點。大家有沒有發現,JQuery渲染資料那個地方,是不是要拼模板"<li>"+data+"</li>".這是個小模板還好,你覺得沒什麼區別,但是一般情況下模板可不是這個簡單的,可能有很幾百行html程式碼,此時你再去拼接,你就會知道痛苦了。還擔心拼接不對,估計至少測試很多遍之後,你才能確定模板是對的。並且程式碼可讀性,實在是不敢恭維。

       然而,Vue.js做這件事太簡單了。在html那裡你直接寫好一個模板,在填充資料的地方填充,使用 v-for迴圈資料資料。就能實現。並且最強大的地方在哪,大家可以看到Vue.js程式碼上面我有使用類似 JQuery的append,把資料插入到裡面嗎?並沒有。而只是往資料陣列lis  push一個數據元素就完了。剩下的全然不用你動手。

    總結: JQuery用來操作一些簡單的DOM操作,Ajax請求操作,然而使用Vue.js來渲染資料,完美組合!!!

1.簡單插入文字   {{message}}

 <p id="text">  {{message  |  uppercase(使用過濾函式)  }}      </p>

  
<script>

   var  text = new Vue(
       {
          el:'#text',  //  用過Jquery的人大家都知道
	  data:{
         message:"Hello VUE"    //  此時  上面p元素中的文字資訊變為 Hello VUE.只有有效顯示文字  若插入<h1>不會顯示標籤效果
          },
	  filters:{   //過濾函式
	    
	    toupper:function($value)
	    {
	      return $value.toUpperCase();  //轉換為全大寫
	    }
	  }
       }
   );

</script>

2.插入HTML文字   v-html
 <div id="text" v-html="html" >    </div>

<script>

     var text = new VUE(   //為了簡單講解   el  data省略寫
         {
	      html: "<h1>Hello VUE</h1>"     //此時  html會被插入div中,顯示正常的<h1>標籤效果。
	      
	 }
     ); 

</script>

3.繫結屬性和資料一致   v-bind:title    v-bind:id   v-bind:alt  v-bind:href   ......等等  關於屬性的操作  (縮寫 :href  :title)

     3.2  繫結事件:   v-on:click = "alert"   onclick(效果)  (縮寫  @click)

<div id="text">

  <button  v-on:click="tip"  >繫結事件</button>

  <img v-bind:src="utl" > 繫結src==url變數

</div>


<script>

 var text = new Vue(
  
{el:'#text',

  data:{
     url :'http://www.baidu.com'   //繫結到 v-bind:src   只要url變化   被繫結的img的src也會發生變化
   },
  methods:{
       tip:function(){
        
          alert("被點選了!");
     }
  }
}

);


</script>

4.input輸入  使用   v-model="message"  實現雙向繫結。 即 輸入的text值會變成message變數的值,message變數的值也會影響input的值
 <p>{{message}}</p>
  <input type="text"  v-model="message" />

<script>

  var text = new Vue(
     {
       el:'#id',
       data:{
           
	   message:'Hello World'    //  相當於   input輸入什麼資料,此時message變數也會變成什麼資料。  之前是單向
         }                            //繫結。message改變則繫結的元素改變。現在兩個方向都有,DOM改變,變數也會改變
     
     }
  
  );


</script>

5.簡單表示式 
 <p id="text">
  
      {{  5+5 }}   //輸出10

      {{  ok?yes:no }}   //輸出yes
  
  </p>

<script>

     var text = new VUE(
        
	{
	   ok:true	
	}
     );
  </script>

6. 簡單判斷  if  else 語句
   <p v-if="seen" > hello </p>   //   如果  seen==  true   就顯示  <p> hello </p>
   <p v-else> Hello</p>          // else  顯示本語句


   還有用法比較好的:  <template  條件語句符合則執行下列模板  >

   <template v-if="" >

         <h1>H1  </h1>
	 <h2>H2 </h2>
	 <h3>H3 </h3>

   </template>

   <template  v-else >

   </template>

7.迴圈列印
 <template v-for="item in items"  >   //從items陣列中  迴圈列印  <li>{{item}}</li>
 
      <li>{{item}}</li>
 
   </template>


<script>

  var vue=  new Vue(
     
      {
        el:"#id",
        data:{

              items:[1,2,3,4,5]  //陣列   此時DOM和資料是繫結的。當items陣列發生變化,相應的繫結的html也會發生變化
           },  methods:{  submit:function(){  $.get(url,data,fucntion(data,status{  this.items.push(6);//頁面自動新增          }))              }       }
      }
   );


</script>


8.獲取DOM元素資訊

  
  var  vue = new Vue();

   vue.$el  ==>  document.getElementById("#id");  //結合 Jquery可以玩出新花樣。
   vue.$data =====>  vue.data