Vue簡單入門

未名w發表於2021-02-05

第一章 簡單介紹及入門

0 匯入vue包

<!-- 開發環境版本,包含了有幫助的命令列警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

【更推薦開發環境版本,有幫助資訊,更為完整】

<!-- 生產環境版本,優化了尺寸和速度 --> <script src="https://cdn.jsdelivr.net/npm/vue"></script>

 

1 宣告式渲染:Vue.js的核心試試允許採用簡潔的模板語法來宣告式地將第一個例子:資料渲染進DOM的系統:

<div id="app">

            {{ message }}

        </div>

        <script>

            var app=new Vue({

                el:"#app",

                data:{

                    message:"youdianxiangnile,zhangmin!"

                }

            })

        </script>

 

第二個例子:

<span v-bind:title="message">滑鼠懸停檢視message資訊<span>

其中 v-bind 特性被稱為指令,指令帶有字首 v- 是Vue提供的特殊特性。

<div id="app-2">

            <span v-bind:title="message">

                滑鼠懸停幾秒檢視此處動態繫結能夠的提示資訊!

            </span>

        </div>

        <script>

            var app2=new Vue({

                el:"#app-2",

                data:{

                    message:'頁面載入於'+new Date().toLocaleString()

                }

            })

    </script>

 

第三個例子:

<div id="app3">

        {{ message }}  

        <h2>學校名稱:{{ school.name }} 。學校電話:{{school.mobile}}</h2>

        <ul>

            <li>{{ campus[0] }}</li>

            <li>{{ campus[1] }}</li>

            </ul>  

    </div>

    <script>

        var app3=new Vue({

            el:"#app3",

            data:{

                message:"nihao,xiaozhang!",

                //定義一個類

                school:{

                    name:"xiaoming",

                    mobile:"400-456-1022"

                },

                //定義一個陣列

                campus:["武漢校區","重慶校區","成都校區","大同校區"]

            }

        })

        </script>

 

 

注意:

(1)el 掛載點

  • Vue 例項的作用範圍:vue會管理el命中的元素及其內部的後代元素;
  • Vue 可以使用class 等多種選擇器,但是一般建議選擇id選擇器
  • Vue 可以設定其他dom元素,如h1 p div,但是不能使用html和body

(2)data 資料物件

  • Vue中用到的資料定義在data中
  • data中可以寫複雜型別的資料
  • 渲染複雜型別資料時,遵守js語法即可

 

第二章 本地應用

1 內容繫結與事件繫結

(1) v-text

作用是設定標籤的內容textContent

預設寫法將一個dom標籤裡面的所有文字進行替換,如果是部分文字替換,建議還使用 兩個大括號 哈

<div id="app">

            {{ message }}

            <h2 v-text="message+'enen1'"></h2>

        </div>

 

(2)v-html

作用是設定元素的innerHTML,內容中有html結構會被解析為標籤

 

<div id="app">

           <p v-html="content1"></p>

           <p v-html="content2"></p>

           <p v-text="content2"></p>

        </div>

        <script>

            var app=new Vue({

                el:"#app",

                data:{

                    content1:"戰勝Frank",

                    content2:"<a href='https://www.baidu.com/'>百度</a>"

                }

            })

        </script>

 

(3)v-on

  • 為元素繫結事件,其中 v-on可以使用@進行替換,繫結方法可以寫在methods屬性中,方法內部中資料的獲取可以使用this關鍵字
<div id="app">

           <input type="button" value="v-on指令1" v-on:click="doIt" />

           <input type="button" value="雙擊簡寫2" @dblclick="doIt" />

           <h2 @click="changefood">{{ food }}</h2>

        </div>

        <script>

            var app=new Vue({

                el:"#app",

                data:{

                    food:"番茄炒雞蛋"

                },

                methods:{

                    //doIt 是在制定#app中的制定methods

                    doIt:function(){

                        alert("做IT!");

                    },

                    //資料更改,this關鍵字

                    changefood:function(){

                        this.food+="炒糊了!"

                    }

                }

            })

        </script>

 

  • 事件繫結的方法寫成函式呼叫的形式,可以傳入自定義引數

定義方法的時候需要定義形參來接收傳入的實參

事件後面跟上 .修飾符 可以對事件進行限制,其中.enter為限制觸發的按鍵為回車

<div id="app">

           

            <button @click="doIt(666,'老鐵')">doIt</button>

            <input type="text" @keyup.enter="sayHi" />

            

        </div>

        <script>

            var app=new Vue({

                el:"#app",

                methods:{

                    doIt:function(p1,p2){

                        console.log("做IT");

                        console.log(p1);

                        console.log(p2);

                    },

                    sayHi:function(){

                        alert("早上好!");

                    }

                }

            })

        </script>

 

(4)一個計數器的簡單例子

<div id="compute">

            <button @click="sub">-</button>

            <span>{{ num }}</span>

            <button @click="add">+</button>

        </div>

        <script>

            var com=new Vue({

                el:"#compute",

                data:{

                    num:1

                },

                methods:{

                    add:function(){

                        if(this.num<10)

                        {

                            this.num++;

                        }

                        else{

                            alert("已經達到最大值!");

                        }

                    },

                    sub:function(){

                        if(this.num>0)

                        {

                            this.num--;

                        }

                        else{

                            alert("已經達到最小值!");

                        }

                    }

                }

            })

        </script>

 

(5)v-show

切換元素的顯示與不顯示,其中還原理是改變style中的display

<div id="app">

           <button @click="changeIsShow">切換</button>

           <p v-show="isShow">你好呀!</p>

        </div>

        <script>

            var app=new Vue({

                el:"#app",

                data:{

                    isShow:true

                },

                methods:{

                    changeIsShow:function(){

                        this.isShow=!this.isShow;

                    }

                }

            })

        </script>

 

(6)v-if

根據表示式的值(真假)設定元素的顯示狀態,本質上是通過操縱dom元素來切換顯示狀態,表示式為true元素存在dom樹中,反之則反。

 

<div id="app">

           <button @click="changeIsShow">切換</button>

           <p v-if="isShow">你好呀!</p>

        </div>

        <script>

            var app=new Vue({

                el:"#app",

                data:{

                    isShow:true

                },

                methods:{

                    changeIsShow:function(){

                        this.isShow=!this.isShow;

                    }

                }

            })

        </script>

 

(7)v-band  可以直接使用 : 簡寫

設定元素的屬性(src class title),如果是class推薦使用物件的方式來寫

 

<style>

            .active{

                border:1px solid red;

            }

</style>

 

        <div id="app">

           <img v-bind:src="imgSrc"/>

           <br />

           <img :src="imgSrc" :title="imgTitle+'哈哈哈哈'" />

           <br />

           <!-- 以判斷表示式的方式來寫-->

           <img :src="imgSrc" :class="isActive?'active':''" @click="toggleActive"/>

           <br />

            <!-- 以物件的方式來寫,active類名是否生效由isActive決定-->

           <img :src="imgSrc" :class="{active:isActive}" @click="toggleActive"/>

        </div>

        <script>

            var app=new Vue({

                el:"#app",

                data:{

                    imgSrc:"https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=3698288116,4248139335&fm=26&gp=0.jpg",

                    imgTitle:"這是一個title",

                    isActive:false

                },

                methods:{

                    toggleActive:function(){

                        this.isActive=!this.isActive;

                    }

                }

            })

        </script>

 

(8) v-for

根據資料生成列表結構,資料經常和v-for結合使用,

語法 (item,index) in 資料【其中item名字可以改】

陣列長度的更新會同步到頁面上面,是響應式的

<div id="app">

           <ul>

               <li v-for="(item,index) in arr">

                   {{index+1}} 城市:{{item}}

               </li>

            </ul>

            <button @click="add">加菜</button>

            <button @click="remove">減菜</button>

            <h2 v-for="it in cai" v-bind:title="it.name">{{it.name}}</h2>

        </div>

        <script>

            var app=new Vue({

                el:"#app",

                data:{

                    arr:["北京","大同","成都","重慶"],

                    cai:[

                        {name:"番茄炒雞蛋"},

                        {name:"青椒土豆絲"}

                    ]

                },

                methods:{

                    add:function(){

                        this.cai.push({name:"幹鍋花椰菜"});

                    },

                    remove:function(){

                        this.cai.shift();

                    }

                }

            })

        </script>

 

(9)v-model

獲取和設定表單元素的值(雙向資料繫結,更改表單中資料 vue裡面值也會改變)

 <div id="app">

            <button @click="setM">修改值</button>

            <input type="text" v-model="message" @keyup.enter="getM"> 

            <h2>{{message}}</h2>

        </div>

        <script>

            var app=new Vue({

                el:"#app",

                data:{

                    message:"戰神FRANK"

                },methods:{

                    getM:function(){

                        alert(this.message);

                    },

                    setM:function(){

                        this.message="你是不是傻";

                    }

                }

            })

        </script>

 

 

第三章 網路應用

(1)axios 強大的網路請求庫

  • axios必須先匯入才可以使用,
  • 使用get或post方法即可傳送對應的請求,
  • then方法中的回撥函式會在請求成功或失敗時觸發,
  • 通過回撥函式的形參可以獲取響應的內容,或錯誤資訊
  • 官網:https://github.com/axios/axios

 

需要在標頭檔案匯入的包

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

 

get和post請求模板

  • axios.get(地址?key=value&key2=values)aa.them(function(response){},function(err){})
  • axios.post(地址,{key:value,key2:value2}).then(function(response){},function(err){})

 

(2)axios+vue

  • axios回撥函式中的this已經改變,無法訪問到vue中data的資料,
  • 可以將this用一個變數儲存起來,直接在回撥函式中呼叫就行了
<div id="app">

            <button @click="getJoke">獲取笑話</button>

            <p>{{joke}}</p>

        </div>

        <script>

            var app=new Vue({

                el:"#app",

                data:{

                    joke:"這是一個很好看的笑話"

                },methods:{

                    getJoke:function(){

                        var that=this;

                        axios.get("https://autumnfish.cn/api/joke").then

                        (function(response){

                            console.log(response);

                            console.log(response.data);

                            that.joke=response.data;

                        }),function(err){

                            console.log(err)

                        }

                    }

                }

            })

        </script>