1. 程式人生 > 其它 >VUE基礎入門使用教程

VUE基礎入門使用教程

第一個Vue程式

.html

<!--view層 ${}  變成了一個模板-->
<div id="app">

    <ul>
        <li><span v-bind:title="m">滑鼠懸停幾秒檢視此處動態繫結的提示資訊!</span> </li>
        <li>{{name}}</li>
        <li>{{tit.name}}</li>
    </ul>

    <a v-bind:href="tit.url">b站連結</a>


</div>

.script

    var vm =new Vue({

        el:"#app",  //元素的縮寫 el
        data:{      //Model : 資料
            m:'Hello vue!',
            name:'Hello  框架',
            tit:{
                name:'Vue',
                url:'https://www.bilibili.com'
            }
        }
    });

07_事件處理-@click-@keyup

1.事件處理基本使用

事件的基本使用:
        1.使用v-on:xxx 或 @xxx 繫結事件,其中xxx是事件名;
        2.事件的回撥需要配置在methods物件中,最終會在vm上
        3.methods中配置的函式,不需要箭頭函式,否則this就不是vm了;
        4.methods中配置的函式,都是被vue所管理的函式,this指向的是vm 或者 元件例項物件;
        5.@click="demo" 和 @click="($event)"效果一致,但後者可以傳參
==============================================================================
<div id="root">
      <button v-on:click="fn1()">點我提示資訊1(不傳參)</button>
      <button v-on:click="fn2($event,66)">點我提示資訊2(傳參)</button>
</div>
==============================================================================
    methods:{
             fn1(event){
             
             },
         fn2(event,number) {
             console.log(event,number)
             //console.log(event.target.innerText)
             //console.log(this)//此處的this是vm
             alert('同學你好');
         }
     }

2.事件修飾符

Vue中的事件修飾

  1. prevent : 阻止事件的預設行為 event.preventDefault() 常用
  2. stop : 停止事件冒泡 event.stopPropagation() 常用
  3. once : 事件只觸發一次(常用)
==============================================================================
<!--阻止預設事件-->
      <a href="http://www.baidu.com" @click.prevent="showInfo">點選我提示資訊</a>

      <!--阻止冒泡事件-->
      <div class="demo1" @click="showInfo">
          <button @click.stop="showInfo()">點選我提示資訊</button>
      </div>

      <!--事件只觸發一次(常用)-->
      <button  @click.once="showInfo">點選我提示資訊</button>

==============================================================================
methods:{
    showInfo(e){
        // e.preventDefault();//阻止預設事件
        // e.stopPropagation();//阻止冒泡
        //e.onceProcessed(); //事件只觸發一次
        alert('同學你好');
    }

}

3.鍵盤事件

<!-- 鍵盤事件
     1. keyup : 鍵盤彈起
     2. keydown : 按下鍵盤
 -->

08_計算屬性- computed

1.姓名案例—用methods實現

因為methods沒有快取,所以只能反覆呼叫,不建議使用這種方式

2.姓名案例—用計算屬性去實現

一、計算屬性:

       1.定義:要用的屬性不存在,要通過已有屬性計算得來。

       2.原理:底層藉助了Objcet.defineproperty方法提供的getter和setter.

       3. get函式什麼時候執行?

               (1).初次讀取時會執行一次。

               (2).當依賴的資料發生改變時會被再次呼叫。

       4.優勢:與methods實現相比, 內部有快取機制(複用),效爺更高,除錯方便。

       5.備註:

               (1).計算屬性最終會出現在vm上,直接讀取使用即可。

               (2).如果計算屬性要被修改,那必須寫set函式去響應修改,且set中 要引起計算時依賴的資料發生改變

<!--準備好一個容器-->
  <div id="root">

      姓:<input type="text" v-model="firstName"><br/>
      名:<input type="text" v-model="lastName"><br/>
      測試:<input type="text" v-model="x"><br/>
      全名:<span>{{fullName}}</span><br/> <!--這裡get只調用了1次,因為computed有快取,所以直接就給其他呼叫的賦值了-->
      全名:<span>{{fullName}}</span><br/>
      全名:<span>{{fullName}}</span><br/>
      全名:<span>{{fullName}}</span>

  </div>
const vm = new Vue({
   el:'#root',
   data:{
       firstName:'唐',
       lastName:'九',
       x:'你好'
   },
   computed:{//計算屬性
        fullName:{
            //1.get有什麼用?當有人在讀取fullName時,get就會被呼叫,且返回值就作為,fullName的值
            //2.get什麼是被呼叫?1.有人初次使用fullName的時候。2.fullName依賴資料發生改變的時候。
            get(){
                console.log('get被呼叫')
                //console.log(this);//此處的this是vm
                return this.firstName+'-'+this.lastName
            },
            //set什麼是被呼叫? 當fullName被修改時
            set(value){
                console.log('set',value)
                let split = value.split('-');
                this.firstName=split[0];
                this.lastName=split[1]
            }
        }

3.data,methods,computed

二、data,methods,computed

data裡面的屬性,你寫什麼value,就是什麼屬性放在vm上

methods裡面的方法,你寫什麼方法,就是什麼方法放在vm上

computed裡面,寫的計算屬性,他不是你寫什麼,vm上就放什麼,
而是vm自動去找get的計算結果(返回值),放在vm身上了,
vm裡面,放的計算結果的名字叫xxx

09_監視屬性-watch

1.天氣案例-監視屬性

<!--準備好一個容器-->
  <div id="root">

      <h2 >今天天氣很{{info}}</h2>
      <button @click="btn">切換天氣</button>

  </div>
 const vm = new Vue ({
    el:'#root',
     //新增屬性,資料
    data:{
     isHot:true,
    },
     //計算屬性
    computed:{
        info(){
            return this.isHot?'炎熱':'涼爽';
        }
    },
    //方法,函式
     methods:{
        btn(){
             this.isHot= !this.isHot;

         }
     },
     //監視屬性
     watch:{
        info:{
            //handler 什麼時候被呼叫?isHot發生改變的時候
            handler(newValue,oldValue){
                console.log("isHot 被修改了",newValue,oldValue)
            },
            //立即執行,函式
            immediate:true, //初始化時,讓handler,呼叫一下
        }
     }
})

2.天氣案例-深度監視

深度監視:

(1)vue中的watch預設不檢測物件內部值的改變(一層)。
(2)配置deep.true 可以監測物件內部值改變(多層)。
備註:
(1)vue自身可以監視物件內部值的改變,但是vue提供的watch預設不可以
(2)使用時watch根據資料的具體結構,決定是否採用深度監視。
==============================================================================
<!--準備好一個容器-->
  <div id="root">
      <h2 >a的值是:{{numbers.a}}</h2>
      <button @click="numbers.a++">點我a+1</button>
  </div>
==============================================================================
 const vm = new Vue ({
        el:'#root',
         //新增屬性,資料
        data:{
         numbers:{
             a:1,
             b:1,
         }
        },
         //監視屬性:一般預設,不提供多級化機構的監控
         watch:{
            info:{
                //handler 什麼時候被呼叫?isHot發生改變的時候
                handler(newValue,oldValue){
                    console.log("isHot 被修改了",newValue,oldValue)
                },
                //立即執行,函式
                immediate:true, //初始化時,讓handler,呼叫一下
            },
             numbers:{
                 //深度監視,監視多級化結構中所有屬性變化
                 deep:true,
                 handler() {
                     console.log("number改變了")
                 }
             }
         }
    })

10_繫結樣式-:class

繫結樣式

<!--準備好一個容器-->
<div id="root" >
    <!--繫結class樣式--字串寫法,適用於:樣式的類名不確定,需要動態指定 -->
    <div class="basic" :class="mood" @click="btn">{{name}}</div><br>

    <!--繫結class樣式--陣列寫法,適用於:要繫結的樣式個數不確定,名字也不確定 -->
    <div class="basic" :class="classArr">{{name}}</div><br>

    <!--繫結class樣式--物件寫法,適用於:要繫結的樣式個數確定,名字也確定,但要動態決定用不用 -->
    <div class="basic" :class="classObj">{{name}}
        
</div>
 ==============================================================================
    new Vue({
        el:'#root',
        data:{
            name:'肉肉',
        //字串
            mood:'normal',
        //陣列
            classArr:['atguigu1','atguigu2','atguigu3'],
        //物件
            classObj:{
                atguigu1:false,
                atguigu2:false,
            }
        }
 ==============================================================================    
    <style>
        .basic{
            width: 400px;
            height: 100px;
            border: 1px solid black;
        }
        .happy{
            background-color: #0093E9;
            background-image: linear-gradient(160deg, #0093E9 0%, #80D0C7 100%);
        }
        .sad{
            background-color: #D9AFD9;
            background-image: linear-gradient(0deg, #D9AFD9 0%, #97D9E1 100%);
        }
        .normal{
            background-color: #85FFBD;
            background-image: linear-gradient(45deg, #85FFBD 0%, #FFFB7D 100%);
        }
        .atguigu1{
           
        }
        .atguigu2{
            border-radius: 15px 50px 30px 5px
        }
        .atguigu3{
            background-color: cornflowerblue;
        }
    </style>

11_條件渲染-v-show : v-if

條件渲染

1.使用v-show,做條件渲染

   <h2 v-show="false">歡迎來到{{name}}</h2>
   <h2 v-show="1===1">歡迎來到{{name}}</h2>

  2.使用v-if做條件渲染
   <h2 v-if="1===1">歡迎來到{{name}}</h2>
   <h2 v-if="false">歡迎來到{{name}}</h2>


        v-show不安全,在網頁原始碼,可以看見,v-if看不見,所以安全!
        但是頻繁切換,最好使用show
        
        頻率低的用v-if
==============================================================================     
        <!--準備好一個容器-->
  <div id="root">
      <h2 >當前n值是{{n}}</h2>
      <button @click="n++">點選+n</button>

      <!--
      <div v-show="n===1">Angular</div>
      <div v-show="n===2">React</div>
      <div v-show="n===3">Vue</div>
      -->
      
      <!--  v-else和v-else-if-->
      <div v-if="n===1">Angular</div>
      <div v-else-if="n===2">React</div>
      <div v-else-if="n===3">Vue</div>
      <div v-else>哈哈哈</div>

  </div>

來源:3309064415