vue筆記


官網
http://cn.vuejs.org/

mvvm 框架--比angular更小巧,文檔閱讀方便,全部組件化
版本2.0

vue 
  指令以  v-xxx
  一段html代碼 加一個json  再new出一個vue實例
  適合做移動端開發 比較小巧 
  上手簡單
  
  angular 適合pc 端開發
   上手難 
   指令一 ng-xxx
   屬性和方法都在$scope上
  
這兩個都不兼容ie低版本ie8以下不兼容

第一步 拿到vue 的 庫文件
     vue.min.js  最新的2.0以上版本
                                
                                思想: 
                                m 數據 data
                                v  視圖 html
                                c  控制器 new vue()
--------------------------------------
vue的雛形
   要求:展示一條數據
     html:
                <div id="box">
                                          {{msg}}
                                </div>
   
   js:
        var c = new Vue({    new出Vue額對象
                                          el:'#box', 選擇器,和jquery一樣
                                          data:{ data里可以放字符串,json ,數組, 布爾,數字
                                                          msg:'document'   要展示的數據內容
                                                          num:12,
                                                          boor:true
                                                          .......
                                          }
                                });
   注意: 這里的c是可以任意起名的,也可以不寫,不寫的話就是this。想要拿到里面的num的值,可以這樣 this.data.num 
----------------------------------
vue常用的指令
      
     v-model  一般放在表單元素上        雙向數據綁定
     
                         html
                            <div id="box">
                                                                <input type="text" v-model="msg" />
                                                                <input type="text" v-model="msg" />
                                                        </div>
    v-repeat  循環
                             <!--循環-->
                                     <!--2.0版本后$key,$index,失效了?-->
                                                     <!--后來查閱了文檔才知道,這是因為在Vue2.0中,v-for迭代語法已經發生了變化:

                                                                                丟棄了:
                                                                                
                                                                                新數組語法 
                                                                                value in arr 
                                                                                (value, index) in arr 
                                                                                
                                                                                新對象語法 
                                                                                value in obj
                                                                                 (value, key) in obj 
                                                                                (value, key, index) in obj
                                                                -->
                        html
                                                                <div id="box" >
                                                                          <ul>
                                                                                    <li v-for=" (value, index)  in arr">
                                                                                                     {{value}} {{index}} 
                                                                                    </li>
                                                                                    <hr />
                                                                                    <li v-for='(key,value,index)  in json'>
                                                                                                    {{value}}  {{key}} {{index}}
                                                                                    </li>
                                                                          </ul>
                                                                </div>
------------------------------------------------------------------
     事件--- v-on
         click
                   var c = new Vue({
                                          el:'#box',
                                         data:{
                                                  arr:['1','2','age'],
                                                  json:{'a':11,'b':22,'c':33}
                                         },
                                         methods:{ 事件方法到dethods里
                                                 事件名:function(){
                                                          alert(1)
                                                          //要求彈出json的c的值
                                                          alert(this.json.c)
                                                 }
                                         }
                                });

v-on:click = "事件名()"
    ddlclick  mouseover mouseout ......
==========
深入:
     v-on:click="show()"   一般是這樣
     @click="show()" 這是簡寫 建議用
---
    事件對象:
      $event定死的,必須有$
      @click(show($event))
      
             methods:{
                                                show:function(ev,n){
                                                        alert(ev.clientX)
                                                        alert(n)//n也可以拿到
                                                        //這里可以拿到事件對象,可以用原生寫了
                                                }
                                        }
      <input id="btn" type="button" value="按鈕" @click="show($event,3)" />
---
  事件冒泡:
            1.   ev.cancelBubble=true;
                                                   事件對象 加 原生里的阻止冒泡方法cancelBubble=true
                                                2. @click.stop="show()"  火狐,谷歌支持,ie不測試
                                                  直接在c事件后加stop
                                                  
        阻止事件默認行為:
                 1. ev.preventDefaule=true;
                                                        事件對象 加 原生里的阻止默認行為
                                   2. @contextmenu.prevent="show1()"
                                   
        鍵盤事件:
              onkeydown onkeyup
              ev.keycode   獲取到鍵碼
             
             也可以@keydown.enter="show()"
                                              up 上
                                              left 左
                                              常用鍵都封裝了。字母沒有
                   等   方便快速
                   
                   
                
              
              
              
-----------------------------------------
顯示隱藏
  v-show
  
  v-show='true/false'; true是顯示 false是隱藏
  
  要求點擊一個按鈕讓一個對象隱藏:
  html:
       <input type="button" v-on:click="a=false"/>
       <div v-show='a'></div>
       在data里設置a=true,意思就是剛開始是顯示的 在點擊按鈕后把數據a變成false傳給v-show
       data{
         a:true
       }

要求點擊一下隱藏再點一下顯示依次往下走:
   核心代碼:
        show:function(){
                                                         if(this.a==false){
                                                                 this.a=true;
                                                         }else{
                                                                 this.a=false;
                                                         }
                                                 }
                
         <input type="button" v-on:click="show()"/>
         寫個方法判斷a的值並且賦值
         
留言信息表例子思路        
        數據第一,有數據vue自會給你渲染視圖
        1.v-on:click把input里的數據存到data里 再用v-for渲染(注意數據格式),在此之前在input上加v-model(把數據存在this上)
        2.刪除一個的時候需要拿到本條的index在data里刪數據(一般是數組)。
        3.刪除全部需要存一個變量newIndex=index,這樣在下面調用的時候就可以刪除,詳細看demo 
        




==============================
屬性:
    <img src="{{url}}"/>
    <img  v-bind:src='url'  />
           簡寫  <img :src='url' />
           
     v-bind 是vue專門綁定屬性的
   
    <!--<img src="{{url}}" id="img"/>-->
                <!--屬性數據中 被2.0丟棄這種寫法 ,之前這樣寫會有效果但是會報404錯,所以用以下這種方法:-->
                <img v-bind:src="url" id="img"/>
    <img :src="url" id="img" :width='a'/>  

特殊屬性
class
       1. :class=[red,blue]  對應的是數據 
                     data{
                           red:'red',
                           blue'blue'
                     }
       2. :class="{red:a,blue:b}" 對應的是 類名和數據
                     data{
                           a:true,
                           b:false
                     }
     3.   也可以吧json直接寫到數據里,看起來更舒服-推薦
           :clsss="json";
           data{
                            json:{
                               red:true,
                               blue:false
                            }
           }
==========
  style 和class的用法一樣
       1.   :styel=[c,d];/.每一個樣式都是一條json
          data:{
               c:{color:'red'},
               d:{backgroundColor:'blue'}//復合樣式用駝峰命名法
          }
         
   2. :style={json};
       data:{
            json{
               color:"red",
               background:"blue"
            }
       }

========================
模版
    http://www.cnblogs.com/jiangxiaobo/p/6068025.html

  {{msg}}   數據雙向綁定  數據更新模版也會跟着更新  
   {{*msg}}  數據只綁定一次 數據更新不更新模版  已失效
              <p v-once>{{msg}}</p>
                                <!--之前是{{*msg}} 2.0 后 需要加v-once  作用是 添加一次性模版 不支持數據更新-->
  {{{msg}}}  數據轉譯輸出 轉成html  已失效
              <p v-html='msg'>{{msg}}</p>
    新的指令 v-once  和 v-html  需要綁定數據 
    
    ==============
vue2.0之前    過濾器
        體統提供一些過濾器
        {{msg| 過濾器1}}
       {{msg| 過濾器1 | 過濾器2}}
     常用的過濾器有
           uppercase
           lowercase
           capitalize
vue2.0之后廢除過濾器,所以需要自己定義過濾器
     語法:
        Vue.filter('過濾器名',function(){})
    
    例如首字母大寫的過濾器這樣寫
      <div id="app">
                            {{message|uppercase}}
                        </div>
                        
                        //過濾器
                        Vue.filter('uppercase', function(value) {
                                  if (!value) { return ''}
                                  value = value.toString()
                                  return value.charAt(0).toUpperCase() + value.slice(1)
                        })
                        過濾器必須寫在vue對象之前才會生效
                        var vm = new Vue({
                                  el:'#app',
                                  data: {
                                    message: 'test'
                                  }
                        }  
  
    -------------
  常用過濾器 封裝
  
                             //全部大寫
                        Vue.filter('Uppercase',function(value){
                                if(!value){return ''}
                                value = value.toString();
                                return value.toUpperCase();
                        })
                        //全部小寫
                        Vue.filter('lowercase',function(value){
                                if(!value){return ''}
                                value  = value.toString();
                                return value.toLowerCase();
                        })
     //把時間戳轉換成北京時間---1
             Vue.filter('time', function (value) {
                                return new Date(parseInt(value) * 1000).toLocaleString().replace(/年|月/g, "-").replace(/日/g, " ");
                            })
                 //把時間戳轉換成北京時間---2 比較麻煩了(原生)優點不依賴框架
                    Vue.filter('time',function(value){
                                                        function toDou(n){
                                                                      return n<10?'0'+n:''+n;
                                                            }
                                  var oDate = new Date(value*1000);
                                 return oDate.getFullYear()+'-'+toDou(oDate.getMonth()+1)+'-'+toDou(oDate.getDate())+' '+toDou(oDate.getHours())+':'+toDou(oDate.getMinutes())+':'+toDou(oDate.getSeconds());
                        })
       //補零
               Vue.filter('todou', function (n) {
                                        return n<10?'0'+n:''+n;
                            })
     ----------------

==================================

交互
     本身vue.js不提供交互,需要引vue的交互模塊
                                    vue-resource.min.js
                                    
    get
                獲取數據                                
methods:{
                                        show:function(){
                                                  this.$http.get('22.txt').then(function(res){
                                                             alert(res.data)
                                                  },function(res){
                                                            alert(res.status)
                                                  })
                                        }
                                }
2.0 之后get發送數據貌似不好使,沒深究,用post就行了 ----不使用min版js就行

發送數據
post 
            methods:{
                                        show:function(){
                                                  this.$http.post('get.php',{
                                                          a:2,  //參數 json 發送數據
                                                          b:3
                                                  },{
                                                          emulateJSON:true//加個聲明
                                                  }).then(function(res){
                                                             alert(res.data)
                                                  },function(res){
                                                            alert(res.status)
                                                  })
                                        }
                                }

jsonp
          <!--
          vue-resource.min.js         不能用於jsonp 還有 連接php文件時有問題
          請使用 vue-resource.js        太坑了 以后再也不用min版了。
          -->
獲取接口

https://sug.so.360.cn/suggest?word=a              好搜的接口
https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=    百度

js:
methods:{
                                        show:function(){
                                                  this.$http.jsonp('https://sug.so.360.cn/suggest',{ //接口末尾不能有空格
                                                        word:'a'  //搜索的內容          
                                                  }).then(function(res){
                                                            console.log(res.data.s)
                                                  },function(res){
                                                            alert(res.status)
                                                  })
                                        }
                                }

-------------------------------------------------------
百度搜索下拉
看 dome  吧

get 練習 微博留言板

注意事項
  數據data中數據變量名 和 事件函數名不要一樣 不然找事件會找不到          this先在數據變量里找 再去 找事件       

此片博文是轉載    Lookforto 作者


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM