主頁 > 軟體設計 > 【萬字長文】 Vue全家桶從入門到實戰,超詳細筆記整理 ( 一 ) (建議收藏)

【萬字長文】 Vue全家桶從入門到實戰,超詳細筆記整理 ( 一 ) (建議收藏)

2021-07-30 08:13:35 軟體設計

筆記根據B站編程不良人視頻整理,視頻鏈接:【編程不良人】VUE全家桶入門到實戰,學VUE看這個就夠了,已完結!基于企業最流行Vue實戰技術, 需要md格式筆記的可以私信我,

目錄

    • 1、Vue 引言
    • 2、Vue入門
      • 2.1、下載Vuejs
      • 2.2、Vue第一個入門應用
    • 3、v-text和v-html
      • 3.1、v-text
      • 3.2、v-html
      • 3.3、v-text和v-html對比
    • 4、vue中事件系結(v-on)
      • 4.1、系結事件基本語法
      • 4.2、Vue中事件的簡化語法
      • 4.3、Vue事件函式兩種寫法
      • 4.4、Vue事件引數傳遞
    • 5、v-show v-if v-bind
      • 5.1、v-show、v-if使用
      • 5.2、v-show、v-if小案例
      • 5.3、v-bind
      • 5.4、v-bind 簡化寫法
      • 5.5、v-bind案例
    • 6、v-for的使用
    • 7、v-model 雙向系結
      • 7.1、v-model
      • 7.2、兩個案例
    • 8、計算屬性
    • 9、事件修飾符
      • 9.1 stop事件修飾符
      • 9.2 prevent 事件修飾符
      • 9.3 self 事件修飾符
      • 9.4 once 事件修飾符
    • 10、按鍵修飾符
      • 10.1 enter 回車鍵
      • 10.2 tab 鍵
    • 11、Axios 基本使用
      • 11.1、引言
      • 11.2、Axios 第一個程式
        • 11.2.1、GET方式的請求
        • 11.2.2 POST方式請求
        • 11.2.3 axios并發請求
        • 11.2.4 攔截器
    • 12、Vue 生命周期

1、Vue 引言

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-w5ZKiCvv-1627348740556)(Vue實戰筆記(一).assets/image-20210129104929487.png)]

漸進式 JavaScript 框架 --摘自官網

# 漸進式
   1. 易用  html css javascript
   2. 高效  開發前端頁面 非常高效 
   3. 靈活  開發靈活 多樣性

# 總結
		Vue 是一個javascript 框架 js 簡化頁面js操作
		bootstrap 是一個css框架  封裝css

# 后端服務端開發人員: 
		頁面標簽 dom jquery js document.getElementById("xxx")
		Vue 漸進式javascript框架: 讓我們通過操作很少的DOM,甚至不需要操作頁面中任何DOM元素,就很容易的完成資料和視圖系結 ====> 雙向系結 MVVM  
		
		注意:日后在使用vue程序中頁面不要再引入Jquery框架
		
		html css--->javascript(document.getElementById()...) ---->jquery($("#xx")) ---> angularjs --->vue(前后端分離架構核心)
		
		vue 前端系統   <-----JSON----->  后臺系統springcloud

# Vue 作者
 	尤雨溪   國內的    

2、Vue入門

2.1、下載Vuejs

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

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

2.2、Vue第一個入門應用

1、vue第一個入門應用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body>
    <div id="app">
        {{msg}}
        <h2>{{msg}}</h2>
        <span>
            <h2>{{msg}}</h2>
            <span>
                <span>{{msg}}</span>
            </span>
        </span>
        <h3>用戶名:{{username}}</h3>
    </div>
</body>
</html>
<script src="js/vue.js"></script>
<script>
    var app= new Vue({
        el:"#app",  //element:元素 作用:用來指定vue實體作用范圍  日后在el指定的作用范圍內可以直接使用{{屬性名}}獲取data中的屬性
        data:{      //data:資料    作用:用來給vue實體物件系結一系列資料
            msg: "Vue歡迎您!",
            username: "小陳!!",
        }
    });
</script>

2、vue實體中定義物件,陣列等相關資料

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body>
    <div id="app">
        <h2>{{msg}}</h2>
        <h2>{{age}}</h2>
        <h2>姓名:{{user.name}}   描述:{{user.des}}</h2>
        <h2>{{schools[0]}}-{{schools[1]}}-{{schools[2]}}-{{schools[3]}}</h2>
        <h2>姓名:{{users[0].name}}  年齡:{{users[0].age}}  生日:{{users[0].bir}}</h2>
        <h2>姓名:{{users[1].name}}  年齡:{{users[1].age}}  生日:{{users[1].bir}}</h2>
        <h2>姓名:{{users[2].name}}  年齡:{{users[2].age}}  生日:{{users[2].bir}}</h2>
    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
       el:"#app",  //指定vue作用范圍
       data:{      //用來給vue實體系結一系列資料
           msg:"百知歡迎您!!!",
           age:"23",
           user:{name:"小陳",des:"他在百知,百知等你!!"}, //定義物件
           schools:["河南校區","北京校區","天津校區","山西校區"], //定義一個陣列
           users:[
               {name:"小王",age:23,bir:"2012-12-01"},
               {name:"小李",age:24,bir:"2013-12-01"},
               {name:"小趙",age:25,bir:"2014-12-01"},
           ]
       }
    });
</script>

3、使用{{屬性名}}獲取data資料時,使用運算式 運算子等相關操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body>
    <div id="app">
        <h2>{{msg}}</h2>
        <!--{{屬性名}}:使用這種方式獲取資料時,可以進行相關的運算(算數,邏輯),呼叫獲取值型別相關js方法-->
        <h2>{{msg + '您好'}}</h2>
        <h2>{{msg == 'hello vue'}}</h2>
        <h2>{{msg.toUpperCase()}}</h2>
        <h2>{{age + 1}}</h2>
        <h2>{{age == 23}}</h2>
    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
       el:"#app",  //指定vue作用范圍
       data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
            age:23,
       }
    });
</script>

4、使用vue時el屬性指定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body >
    <div id="app" class="aa">
        <h2>{{msg}}</h2>

    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
       el:"#app",  //指定vue作用范圍
                        // 書寫格式:使用css選擇器 id選擇器 html選擇器 類選擇器 推薦使用id選擇器 id選擇器具有唯一性
                        // 注意事項:不要將el指向body或html標簽 Do not mount Vue to <html> or <body> - mount to normal elements instead.
       data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
       }
    });
</script>

5、總結

# 總結:
			1.vue實體(物件)中el屬性: 	代表Vue的作用范圍  日后在Vue的作用范圍內都可以使用Vue的語法
			2.vue實體(物件)中data屬性: 用來給Vue實體系結一些相關資料, 系結的資料可以通過{{變數名}}Vue作用范圍內取出
			3.在使用{{}}進行獲取data中資料時,可以在{{}}中書寫運算式,運算子,呼叫相關方法,以及邏輯運算等
			4.el屬性中可以書寫任意的CSS選擇器[jquery選擇器],但是在使用Vue開發是推薦使用 id選擇器  注意: el屬性值不能指定body或html標簽

3、v-text和v-html

3.1、v-text

v-text:用來獲取data中資料將資料以文本的形式渲染到指定標簽內部 類似于javascript 中 innerText

	<div id="app" class="aa">
        <span >{{ message }}</span>
        <span v-text="message"></span>
    </div>

    <!--引入vue.js-->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:"#app",
            data:{
                message:"百知歡迎您"
            }
        })
    </script>
# 總結
				1.{{}}(插值運算式)和v-text獲取資料的區別在于 
				a.使用v-text取值會將標簽中原有的資料覆寫 使用插值運算式的形式不會覆寫標簽原有的資料
				b.使用v-text可以避免在網路環境較差的情況下出現插值閃爍

3.2、v-html

v-html:用來獲取data中資料將資料中含有的html標簽先決議在渲染到指定標簽的內部 類似于javascript中 innerHTML

		<div id="app" class="aa">
        <span>{{message}}</span>
        <br>
        <span v-text="message"></span>

        <br>
        <span v-html="message">xxxxxx</span>
    </div>

    <!--引入vue.js-->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:"#app",
            data:{
                message:"<a href=''>百知歡迎您</a>"
            }
        })
    </script> }        })    </script>

3.3、v-text和v-html對比

代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body >
    <div id="app" class="aa">
        <h2>{{msg}} 您好</h2>
        <!--vue提供兩個指令: v-text v-html 都可以直接根據屬性名獲取data資料渲染到指定標簽內-->

        <!--v-text-->
        <h2><span v-text="msg"></span> 您好</h2>
        <!--
            v-text: {{}} 取值區別:
                1.使用{{}}取值不會將標簽原始資料覆寫 使用v-text獲取資料會將標簽中原始內容覆寫
                2.v-text獲取資料時不會出現插值閃爍  {{屬性名}} ===> 插值運算式:容易出現插值閃爍 插值閃爍:當網路不好條件情況下使用{{}}方式獲取資料
        -->
        <h2 v-html="msg"></h2>
        <!--
            共同點:都可以直接根據data中資料名,將資料渲染到標簽內部
            v-text: v-text將獲取資料直接以文本形式渲染到標簽內部                innerText
            v-html: v-html將獲取資料中含有html標簽決議之后渲染到對應標簽內部     innerHtml
        -->
        <h1 >{{content}}</h1>
        <h1 v-text="content"></h1>
        <h1 v-html="content"></h1>
    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
       el:"#app",  //指定vue作用范圍
       data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
            content : "歡迎來到<a href='http://www.baidu.com'>百度</a>",
       }
    });
</script>

運行結果:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LdfpoTfT-1627348740558)(Vue實戰筆記(一).assets/image-20210709215316787.png)]

4、vue中事件系結(v-on)

4.1、系結事件基本語法

1、vue事件系結(一)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body >
    <div id="app" >
        <h2>{{msg}}</h2>
        <h2 v-text="msg"></h2>
        <h2 v-html="msg"></h2>

        <!--
            js 事件三要素
                1.事件源:發生事件源頭稱之為事件源,一般指的是html標簽
                2.事件:發生特定動作 onclick單擊 dbclick 雙擊 onkeyup ......
                3.監聽器:事件處理器程式 事件處理函式 function(){}
            vue 事件:v-on
                1.在vue中給對應標簽系結事件可以通過vue提供v-on指令進行事件系結 ==> v-on:事件名
                2.在vue中事件處理函式統一宣告在vue實體中methods屬性
        -->
        <!--給button按鈕系結多個事件-->
        <input type="button" value="點我" v-on:click="aaa" v-on:mouseover="bbb" v-on:mouseout="ccc">
    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
       el:"#app",  //指定vue實體作用范圍
       data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
       },
       methods:{ //用來給當前vue實體物件,宣告一系列函式
           aaa: function () {
                alert("aaa");
           },
           bbb: function () {
                console.log("mouse over");
           },
           ccc: function () {
               console.log("mouse out");
           }
       }
    });
</script>

2、vue事件系結(二)

給一個按鈕系結點擊+1事件,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body >
    <div id="app" >
        <h1>{{msg}}</h1>
        <h1>{{age}}</h1>
        <!--
            vue事件:
                1. 使用v-on:事件名
                2. 函式名統一定義在vue實體中 methods 屬性中
        -->
        <input type="button" value="點我給年齡+1" v-on:click="incrmentAge">
        <input type="button" value="點我給年齡-1" v-on:click="decrmentAge">
    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
       el:"#app",  //指定vue實體作用范圍
       data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
            age:23,
       },
       methods:{ //用來給當前vue實體物件,宣告一系列函式
           incrmentAge:function () {
               //this物件代表當前vue實體物件
               console.log(this);
               console.log(this.age)
               if(this.age >= 120) return;
               this.age ++;  //vue實體中data資料age發生變化
           },
           decrmentAge:function () { //定義函式
               if(this.age < 2) return ;
               this.age --;
           }
       }
    });
</script>

3、總結

? 事件源: 發生事件dom元素 事件: 發生特定的動作 click.... 監聽器 發生特定動作之后的事件處理程式 通常是js中函式

  1. vue中系結事件是通過v-on指令來完成的 v-on:事件名 如 v-on:click

  2. v-on:事件名的賦值陳述句中是當前事件觸發呼叫的函式名

  3. vue中事件的函式統一定義在Vue實體的methods屬性中

  4. vue定義的事件中this指的就是當前的Vue實體,日后可以在事件中通過使用this獲取Vue實體中相關資料 呼叫methods中相關方法

4.2、Vue中事件的簡化語法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body >
    <div id="app" >
        <h1>{{msg}}</h1>
        <h1>{{age}}</h1>

        <!--
            vue事件系結  v-on:事件名  簡化寫法===> @事件名
        -->
        <input type="button" value="點我改變年齡" @click="changeAge">
    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
       el:"#app",  //指定vue實體作用范圍
       data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
            age:23,
       },
       methods:{
           changeAge:function () { 
               this.age ++ ;
           }
       }
    });
</script>
# 總結:
			1.日后在vue中系結事件時可以通過@符號形式 簡化  v-on 的事件系結

4.3、Vue事件函式兩種寫法

<script>
    var app = new Vue({
       el:"#app",  //指定vue實體作用范圍
       data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
            age:23,
       },
       methods:{
           /*changeAge:function () { //定義事件 簡化寫法
               this.age ++ ;
           }*/
           changeAge(){ //es6語法 ecmascript 6版本
               this.age ++ ;
           }
       }
    });
</script>
# 總結:
			1.Vue中事件定義存在兩種寫法  
				 一種是 函式名:function(){}       
			     一種是 函式名(){} 推薦

4.4、Vue事件引數傳遞

我們還可以給vue事件中傳遞引數,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body >
    <div id="app" >
        <h1>{{msg}}</h1>
        <h1>{{age}}</h1>

        <!--
            vue事件系結  v-on:事件名  簡化 @事件名="事件函式名(引數......)"
        -->
        
        <!--多個引數使用','隔開-->
        <input type="button" value="點我改變年齡的值" @click="changeAge(10,'xiaohei')"> 
    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el:"#app",  //指定vue實體作用范圍
        data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
            age:23,
        },
        methods:{
            changeAge(number,name){ //定義事件
                console.log(number);
                console.log(name);
                this.age += number ;
            }
        }
    });
</script>
# 總結:
	1.在使用事件時,可以直接在事件呼叫處給事件進行引數傳遞,在事件定義處通過定義對應變數接收傳遞的引數

5、v-show v-if v-bind

5.1、v-show、v-if使用

v-show: 用來控制頁面中某個標簽元素是否展示

v-if: 用來控制頁面元素是否展示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body >
    <div id="app" >
        <h2>{{msg}}</h2>
        <!--
            v-if、v-show : 作用:都是用來控制頁面中標簽是否展示和隱藏 使用:標簽:v-if="true|false" v-show="true|false"
            區別:
                v-show: 底層在控制頁面標簽是否展示時底層使用的是css 中 display 屬性來標簽展示和隱藏  推薦使用:v-show 資料量比較大 控制顯示狀態切換頻繁
                v-if  : 底層在控制頁面標簽是否展示時底層是直接操作dom元素,通過對dom元素洗掉和添加來控制標簽的展示和隱藏
        -->
        <!--v-show-->
        <h1 v-show="isShow">{{content}}</h1>
        <!--v-if-->
        <h1 v-if="isShow">{{content}}</h1>
    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el:"#app",  //指定vue實體作用范圍
        data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
            content: "vue學習",
            isShow:true
        },
        methods:{ //用來給vue實體定義事件處理函式

        }
    });
</script>

總結:

  1. 在使用v-show時可以直接書寫boolean值控制元素展示,也可以通過變數控制標簽展示和隱藏,
  2. 在v-show中可以通過boolean運算式控制標簽的展示和隱藏,
  3. v-if、v-show : 作用:都是用來控制頁面中標簽是否展示和隱藏 使用:標簽:v-if="true|false",v-show="true|false"
  4. 區別:
    • v-show: 底層在控制頁面標簽是否展示時底層使用的是css 中 display 屬性來標簽展示和隱藏 ,推薦使用:v-show 在資料量比較大和控制顯示狀態切換頻繁時,
    • v-if : 底層在控制頁面標簽是否展示時底層是直接操作dom元素,通過對dom元素洗掉和添加來控制標簽的展示和隱藏,

5.2、v-show、v-if小案例

1、v-show、v-if顯示隱藏案例(一)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body >
    <div id="app" >
        <!-- v-show v-if -->
        <h2 v-show="isShow">{{msg}}</h2>

        <!--系結事件 單擊事件 @click-->
        <input type="button" value="顯示" @click="show">
        <input type="button" value="隱藏" @click="hidden">
        <input type="button" value="切換顯示狀態" @click="changeState">
        <input type="button" value="切換顯示狀態,另一種寫法" @click="isShow=!isShow">

    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el:"#app",  //指定vue實體作用范圍
        data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
            isShow:true
        },
        methods:{ //用來給vue實體定義事件處理函式
            show(){  //用來顯示
                this.isShow = true;
            },
            hidden(){//用來隱藏
                this.isShow = false;
            },
            changeState(){ //切換顯示狀態
                this.isShow = !this.isShow;
            },
        }
    });
</script>

2、v-show、v-if顯示隱藏案例(二)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body >
    <div id="app" >
        <!-- v-show v-if -->
        <h2>{{msg}}</h2>

        <!--圖片添加滑鼠移入事件-->
        <img width="200" v-show="isShow" @mouseover="hide" style="border: 5px red solid" src="https://img0.baidu.com/it/u=384452397,1089369801&fm=26&fmt=auto&gp=0.jpg" alt="這是圖片">
    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el:"#app",  //指定vue實體作用范圍
        data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
            isShow:true
        },
        methods:{ //用來給vue實體定義事件處理函式
            hide(){
                this.isShow = false;
            }
        }
    });
</script>

5.3、v-bind

v-bind: 用來系結標簽的屬性從而通過vue動態修改標簽的屬性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body >
    <div id="app" >

        <h2>{{msg}}</h2>

       <!--
            v-bind: 系結 作用:用來將html標簽中相關屬性系結到vue實體中,日后通過對vue實體中資料修改,影響到對應標簽中屬性變化
                        語法:v-bind:屬性名
        -->
        <img v-bind:width="width" v-bind:src="imgSrc" v-bind:alt="tip">
    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el:"#app",  //指定vue實體作用范圍
        data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
            imgSrc:"https://img0.baidu.com/it/u=384452397,1089369801&fm=26&fmt=auto&gp=0.jpg",
            width:200,
            tip:"這是圖片"
        },
        methods:{ //用來給vue實體定義事件處理函式

        }
    });
</script>

5.4、v-bind 簡化寫法

? vue為了方便我們日后系結標簽的屬性提供了對屬性系結的簡化寫法如 v-bind:屬性名 簡化之后 :屬性名

<!--
	v-bind: 系結 作用:用來將html標簽中相關屬性系結到vue實體中,日后通過對vue實體中資料修改,影響到對應標簽中屬性變化
	語法:v-bind:屬性名   =====> 簡化寫法:屬性名
-->
<img :width="width" :src="imgSrc" :alt="tip">

擴展v-bind使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
    <style>
        .aa{
            border: 5px red solid;
        }
        .bb{
            border: 5px darkorange solid;
        }
    </style>
</head>
<body >
    <div id="app" >

        <h2>{{msg}}</h2>

       <!--
            v-bind: 系結 作用:用來將html標簽中相關屬性系結到vue實體中,日后通過對vue實體中資料修改,影響到對應標簽中屬性變化
                        語法:v-bind:屬性名   =====> 簡化寫法:屬性名
        -->
        <img :width="width" :src="imgSrc" :alt="tip" :class="isClass?'aa':'bb'">
    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el:"#app",  //指定vue實體作用范圍
        data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
            imgSrc:"https://img0.baidu.com/it/u=384452397,1089369801&fm=26&fmt=auto&gp=0.jpg",
            width:200,
            tip:"這是圖片",
            isClass:true,  //ture 顯示red false 顯示orange
        },
        methods:{ //用來給vue實體定義事件處理函式

        }
    });
</script>

5.5、v-bind案例

實作滑鼠移入和移出對圖片和邊框的切換,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
    <style>
        .aa{
            border: 5px red solid;
        }
        .bb{
            border: 5px darkorange solid;
        }
    </style>
</head>
<body >
    <div id="app" >

        <h2>{{msg}}</h2>
        <!--屬性系結-->
        <img width="200" @mou="change" :src="src" :class="cls" @mouseover="change" @mouseout="recover">
    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el:"#app",  //指定vue實體作用范圍
        data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
            src:"https://img2.baidu.com/it/u=1077360284,2857506492&fm=26&fmt=auto&gp=0.jpg",
            cls:"aa"
        },
        methods:{ //用來給vue實體定義事件處理函式
            change(){
                this.src = "https://img1.baidu.com/it/u=3229045480,3780302107&fm=26&fmt=auto&gp=0.jpg";
                this.cls = "bb";
            },
            recover(){
                this.src = "https://img2.baidu.com/it/u=1077360284,2857506492&fm=26&fmt=auto&gp=0.jpg";
                this.cls = "aa";
            }
        }
    });
</script>

6、v-for的使用

v-for: 作用就是用來對物件進行遍歷的(陣列也是物件的一種)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body >
    <div id="app" >

        <h2>{{msg}}</h2>

        <!--
            v-for : 作用:用來給vue實體中資料進行遍歷
        -->
        <h1>遍歷物件</h1>
        <h2 v-for="(value,key,index) in user">
            index: {{index}} key:{{key}} value:{{value}}
        </h2>

        <h1>遍歷陣列</h1>
        <h2 v-for="(school,index) in schools">
            index:{{index}}  schools:{{school}}
        </h2>

        <h1>遍歷陣列中含有物件</h1>
        <h2 v-for="(user,index) in users" :key = "user.id">
            index: {{index}} name:{{user.name}} age:{{user.age}} bir:{{user.bir}}
        </h2>

    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el:"#app",  //指定vue實體作用范圍
        data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",
            user:{name:"小王",age:23,bir:"2012-02-06"},
            schools:["北京","重慶","天津"],
            users:[
                {id:"1",name:"小王",age:23,bir:"2012-02-06"},
                {id:"2",name:"小李",age:34,bir:"2016-02-06"},
                {id:"3",name:"小趙",age:12,bir:"2014-02-06"},
            ]
        },
        methods:{ //用來給vue實體定義事件處理函式

        }
    });
</script>
# 總結
	1.在使用v-for的時候一定要注意加入:key 用來給vue內部提供重用和排序的唯一key 

7、v-model 雙向系結

7.1、v-model

v-model: 作用用來系結標簽元素的值與vue實體物件中data資料保持一致,從而實作雙向的資料系結機制

代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body >
    <div id="app" >

        <h2>{{msg}}</h2>

        <!--
            v-model : 作用:用來系結from表單標簽中的value屬性交給vue實體進行管理 input select checxbox button ...
        -->
        <input type="text" v-model="msg">

        <input type="button" value="改變data資料" @click="change">

    </div>
</body>
</html>
<!--引入vue.js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el:"#app",  //指定vue實體作用范圍
        data:{      //用來給vue實體系結一系列資料
            msg:"hello vue",

        },
        methods:{ //用來給vue實體定義事件處理函式
            change(){
                this.msg = "vue學習"
            }
        }
    });
</script>

總結:

# 總結
		1.使用v-model指令可以實作資料的雙向系結 
		2.所謂雙向系結 表單中資料變化導致vue實體data資料變化   vue實體中data資料的變化導致表單中資料變化 稱之為雙向系結

# MVVM架構  雙向系結機制
	Model: 資料  Vue實體中系結資料
	
	VM:   ViewModel  監聽器

	View:  頁面  頁面展示的資料

學完v-model以后,我們一起來做兩個小案例,

7.2、兩個案例

備忘錄案例實作

需求:

代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body>
    <div id="app">
        <h1>{{msg}}</h1>
        <!-- v-if(dom)、v-show(css display) : 作用:都是用來控制頁面中標簽是否展示和隱藏-->
        輸入備忘錄內容:<input type="text" v-model="content"> <input type="button" value="添加到備忘錄" @click="saveItem"> <br>

        <ul v-show="items.length > 0">
            <li v-for="(item,index) in items">{{index+1}}. {{item}} <a href="javascript:;" @click="delItem(index)">洗掉</a></li>
        </ul>
        <h5 v-show="items.length == 0">當前備忘錄中還沒有任何內容~~,請添加!</h5>
        <h3>當前備忘錄中共:{{items.length}}條</h3>
        <input type="button" value="清空備忘錄" @click="delAllItems">
    </div>
</body>
</html>
<!--引入vue的js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el:"#app",  //代表vue實體作用范圍
        data:{      //在vue實體中定義一系列資料
            msg:"備忘錄功能實作",
            items:["今天去買菜","今天要好好學習","今天要取快遞"],
            content:""
        },
        methods:{ //在vue實體中定義相關函式
            saveItem(){ //添加備忘錄方法
                console.log(this.content);
                if(!this.content) {
                    alert("請輸入備忘錄內容!!!")
                    return;
                }
                this.items.push(this.content); //將新增的內容添加到陣列中
                this.content="";
            },
            delItem(index){ //根據下標洗掉指定元素
                console.log(index);
                this.items.splice(index,1); //根據下標洗掉元素 //引數1:洗掉起始下標 引數2:洗掉元素個數
            },
            delAllItems(){ //清空備忘錄
                this.items = [];
            }
        }
    });
</script>

效果:

購物車案例實作

需求:

代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body>
    <div id="app">
        <h1>{{msg}}</h1>

        <table border="1">
            <tr>
                <th>id</th>
                <th>名稱</th>
                <th>價格</th>
                <th>數量</th>
                <th>小計</th>
            </tr>
            <!--v-for-->
            <tr v-for="(item,index) in items" :key="item.id">
                <td>{{item.id}}</td>
                <td>{{item.name}}</td>
                <td>{{item.price}}</td>
                <td><input type="button" value="-" @click="decrCount(index)">{{item.count}}<input type="button" value="+" @click="incrCount(index)"></td>
                <td>{{(item.price * item.count).toFixed(2)}}</td>
            </tr>
        </table>

        <h3>總價格:{{getTotalPrice()}}</h3>
    </div>
</body>
</html>
<!--引入vue的js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el:"#app",  //代表vue實體作用范圍
        data:{      //在vue實體中定義一系列資料
            msg:"購物車功能實作",
            items:[
                {id:1,name:"蘋果iphone12",count:1,price:28.28},
                {id:2,name:"華為mate40 pro",count:1,price:30.28},
            ]
        },
        methods:{ //在vue實體中定義相關函式
            incrCount(index){  //數量增加的方法
                console.log(this.items[index].count);
                this.items[index].count++;
            },
            decrCount(index){  //數量減少的方法
                console.log(this.items[index].count);
                if( this.items[index].count >= 1){
                    this.items[index].count--;
                }else{
                    alert("不能在少了!");
                    return ;
                }
            },
            getTotalPrice(){ 
                var totalPrice = 0;
                for(var i = 0; i < this.items.length; i++){
                    totalPrice += this.items[i].count * this.items[i].price;
                }
                return totalPrice.toFixed(2);
            }
        }
    });
</script>

效果:

8、計算屬性

計算屬性:computed: vue官方提供一個計算屬性

代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body>
    <div id="app">
        <h1>{{msg}}</h1>

        <!--
            computed: vue官方提供一個計算屬性
                作用:在完成某種業務時,往往頁面結果需要經過多次計算才能獲取,computed屬性就是用來完成頁面結果多次計算
                好處:在完成計算同時也會將本次計算結果進行快取,如果資料沒有發生變化,在頁面中多次使用,計算方法僅執行一次
                使用:{{ 屬性名}} 屬性名即方法名稱
        -->
        <table border="1">
            <tr>
                <th>id</th>
                <th>名稱</th>
                <th>價格</th>
                <th>數量</th>
                <th>小計</th>
            </tr>
            <!--v-for-->
            <tr v-for="(item,index) in items" :key="item.id">
                <td>{{item.id}}</td>
                <td>{{item.name}}</td>
                <td>{{item.price}}</td>
                <td><input type="button" value="-" @click="decrCount(index)">{{item.count}}<input type="button" value="+" @click="incrCount(index)"></td>
                <td>{{(item.price * item.count).toFixed(2)}}</td>
            </tr>
        </table>

        <!--使用methods方法完成計算業務:
            缺點:
                1.只要呼叫了一次計算方法,整個計算方法就會執行一次,如果在一個頁面中多次使用到計算結果,可能會導致造成重復計算,導致頁面加載性能變低
        -->
        <h3>總價格:{{totalPrice}}</h3>

    </div>
</body>
</html>
<!--引入vue的js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el:"#app",  //代表vue實體作用范圍
        data:{      //在vue實體中定義一系列資料
            msg:"購物車功能實作之methods方法實作總價格",
            items:[
                {id:1,name:"蘋果iphone12",count:1,price:28.28},
                {id:2,name:"華為mate40 pro",count:1,price:30.28},
            ]
        },
        methods:{ //在vue實體中定義相關函式
            incrCount(index){  //數量增加的方法
                console.log(this.items[index].count);
                this.items[index].count++;
            },
            decrCount(index){  //數量減少的方法
                console.log(this.items[index].count);
                if( this.items[index].count >= 1){
                    this.items[index].count--;
                }else{
                    alert("不能在少了!");
                    return ;
                }
            },

        },
        computed:{  //用來書寫計算相關方法  計算屬性
            totalPrice(){ //計算方法 好處:只進行一次計算,多次使用時直接使用第一次計算之后快取結果
                var totalPrice = 0;
                for(var i = 0; i < this.items.length; i++){
                    totalPrice += this.items[i].count * this.items[i].price;
                }
                return totalPrice.toFixed(2);
            }
        }
    });
</script>

總結:

  1. 作用:在完成某種業務時,往往頁面結果需要經過多次計算才能獲取,computed屬性就是用來完成頁面結果多次計算
  2. 好處:在完成計算同時也會將本次計算結果進行快取,如果資料沒有發生變化,在頁面中多次使用,計算方法僅執行一次
  3. 使用:{{ 屬性名}} 屬性名即方法名稱

9、事件修飾符

修飾符: 用來和事件連用,用來決定事件觸發條件或者是阻止事件的觸發機制

# 1.常用的事件修飾符
	.stop    停止
	.prevent 阻止
	.self    獨自
	.once    一次
	

9.1 stop事件修飾符

用來阻止事件冒泡

<h2>stop事件修飾符</h2>
<!--.stop 事件修飾符 作用:用來阻止事件的冒泡-->
<div style="width: 200px;height: 200px;background: red" @click="parent">

    <!--對孩子中單擊事件進行修飾:不進行事件冒泡處理 .stop-->
    <div style="width: 100px;height: 100px;background: green" @click.stop="child"></div>

</div>

9.2 prevent 事件修飾符

用來阻止標簽的默認行為

<h2>prevent事件修飾符</h2>
<!--默認行為:根據href連接自動跳轉 .prevent 阻止事件默認行為-->
<a href="http://www.baidu.com" @click.prevent="search">百度一下</a>
<a href="javascript:void(0);" @click.prevent="search">百度一下</a>
<a href="javascript:;" @click.prevent="search">百度一下</a>

9.3 self 事件修飾符

用來針對于當前標簽的事件觸發 ===========> 只觸發自己標簽的上特定動作的事件 只關心自己標簽上觸發的事件 不監聽事件冒泡

<h2>slef事件修飾符</h2>
<!--self: 只監聽自身標簽觸發的對應事件-->
<div style="width: 200px;height: 200px;background: aqua" @click.self="parent">

    <div style="width: 100px;height: 100px;background: green" @click="child"></div>
    <div style="width: 100px;height: 100px;background: brown" @click="child"></div>

</div>

9.4 once 事件修飾符

once 一次作用: 就是讓指定事件只觸發一次

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body>
    <div id="app">

        <h1>{{msg}}</h1>

        <!--
            事件修飾符 作用:用來和事件連用,用來決定事件觸發條件和決定事件觸發機制
            .stop       停止事件冒泡
            .prevent    阻止默認行為
            .slef       只觸發自身行為
            .once       一次事件

            注意:事件修飾符可以多個連用
         -->
        <h2>stop事件修飾符</h2>
         <!--.stop 事件修飾符 作用:用來阻止事件的冒泡-->
         <div style="width: 200px;height: 200px;background: red" @click="parent">

             <!--對孩子中單擊事件進行修飾:不進行事件冒泡處理 .stop-->
             <div style="width: 100px;height: 100px;background: green" @click.stop.once="child"></div>

         </div>

        <h2>prevent事件修飾符</h2>
        <!--默認行為:根據href連接自動跳轉 .prevent 阻止事件默認行為-->
        <a href="http://www.baidu.com" @click.prevent="search">百度一下</a>
        <a href="javascript:void(0);" @click.prevent="search">百度一下</a>
        <a href="javascript:;" @click.prevent="search">百度一下</a>

        <h2>slef事件修飾符</h2>
        <!--self: 只監聽自身標簽觸發的對應事件-->
        <div style="width: 200px;height: 200px;background: aqua" @click.self="parent">

            <div style="width: 100px;height: 100px;background: green" @click="child"></div>
            <div style="width: 100px;height: 100px;background: brown" @click="child"></div>

        </div>

        <h2>once事件修飾符</h2>
        <!--once事件修飾符:作用:只能讓標簽上的對應事件執行一次-->
        <input type="button" value="點我" @click.once="clickMe">
    </div>
</body>
</html>
<!--引入vue的js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el:"#app",  //代表vue實體作用范圍
        data:{      //在vue實體中定義一系列資料
            msg:"事件修飾符",

        },
        methods:{ //在vue實體中定義相關函式
            parent(){
                alert("parent div event");
            },
            child(){
                alert("child div event");
            },
            search(){
                alert("a click event");
            },
            clickMe(){
                alert("click me!!!")
            }
        },
        computed:{  //用來書寫計算相關方法  計算屬性

        }
    });
</script>

10、按鍵修飾符

作用: 用來與鍵盤中按鍵事件系結在一起,用來修飾特定的按鍵事件的修飾符

# 按鍵修飾符
	.enter
	.tab
	.delete (捕獲“洗掉”和“退格”鍵)
	.esc
	.space
	.up
	.down
	.left
	.right

10.1 enter 回車鍵

用來在觸發回車按鍵之后觸發的事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body>
    <div id="app">

        <h1>{{msg}}</h1>
        <!--
            按鍵修飾符:作用:用來和鍵盤上事件(keyup,keydown......)進行連用,用來修飾鍵盤上特定的按鍵來觸發對應的事件
            .enter
            .tab
            .delete (捕獲“洗掉”和“退格”鍵)
            .esc
            .space
            .up
            .down
            .left
            .right
        -->
        <!--.enter 回車按鍵修飾符-->
        <input type="text" v-model="msg" @keyup.enter="test">
    </div>
</body>
</html>
<!--引入vue的js檔案-->
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el:"#app",  //代表vue實體作用范圍
        data:{      //在vue實體中定義一系列資料
            msg:"按鍵修飾符",

        },
        methods:{ //在vue實體中定義相關函式
            test(){
                console.log("test");
            }
        },
        computed:{  //用來書寫計算相關方法  計算屬性

        }
    });
</script>

10.2 tab 鍵

用來捕獲到tab鍵執行到當前標簽是才會觸發

<input type="text" @keyup.tab="test">

11、Axios 基本使用

11.1、引言

Axios 是一個異步請求技術,核心作用就是用來在頁面中發送異步請求,并獲取對應資料在頁面中渲染 頁面區域更新技術 Ajax

11.2、Axios 第一個程式

中文網站:https://www.kancloud.cn/yunye/axios/234845

安裝: https://unpkg.com/axios/dist/axios.min.js

11.2.1、GET方式的請求

后端代碼:

package com.xiao.controller;

import com.xiao.entity.User;
import org.springframework.web.bind.annotation.*;

import javax.websocket.server.PathParam;
import java.util.Date;

@RestController //代表介面中回傳的都是json格式資料
@CrossOrigin //運行所有的請求 所有域訪問 解決:跨域問題
public class AdminController {

    //user介面

    //rest介面 url/11/
    @GetMapping("user/{id}")
    public User FindUserById(@PathVariable("id") Integer id){
        System.out.println("id: "+id);
        System.out.println("user...");
        return new User(id,"小李",23,new Date());
    }

    //queryString介面 url?id=11
    @GetMapping("user")
    public User user(@RequestParam("id") Integer id){
        System.out.println("id: "+id);
        System.out.println("user...");
        return new User(id,"小陳",23,new Date());
    }

    //測驗介面
    @GetMapping("demo")

    public String demo(){
        System.out.println("demo...");
        return "demo ok";
    }
}

前端代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body>
    <div id = "app">
        <h1>axios的GET方式請求</h1>
    </div>
</body>
</html>
<!--引入axios異步請求核心js檔案-->
<script src="js/axios.min.js"></script>
<!--測驗異步請求-->
<script>

    //發送axios 的GET方式請求
    /*axios.get("http://localhost:8989/user?id=11").then(function (res){
        console.log(res.data);
        console.log(res.data.id);
        console.log(res.data.name);
        console.log(res.data.age);
        console.log(res.data.bir);
    });*/

    //es6中簡化寫法function(){}簡化寫法java中lambada運算式   ()=>
    axios.get("http://localhost:8989/user/11").then((res)=>{
        console.log(res.data);
        console.log(res.data.id);
        console.log(res.data.name);
        console.log(res.data.age);
        console.log(res.data.bir);
    });


    /*axios.get("http://localhost:8989/demo").then(function (resonse){ //then 正確請求回傳處理結果
        console.log(resonse.data);
    }).catch(function (error){  //請求地址值出錯的處理結果
        console.log(error)
    });   //發送異步請求方式*/
</script>

11.2.2 POST方式請求

后端代碼:

//定義post介面
@PostMapping("user")
public Map<String,Object> save(@RequestBody User user){ //@RequestBody 將json格式資料轉換成java物件
    System.out.println("user:" + user);
    HashMap<String,Object> result = new HashMap<>();
    result.put("success",true);
    result.put("msg","添加成功~~");
    return result;
}

前端代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body>
    <div id = "app">
        <h1>axios的POST方式請求</h1>
    </div>
</body>
</html>
<!--引入axios異步請求核心js檔案-->
<script src="js/axios.min.js"></script>
<!--測驗異步請求-->
<script>
    //發送post方式請求
    //引數1: url地址 引數2: 請求資料
    axios.post("http://localhost:8989/user",{
        name:"小李",
        age:23,
        bir:"2012-02-05"
    }).then((res)=>{
        console.log(res.data);
    });

</script>

11.2.3 axios并發請求

并發請求: 將多個請求在同一時刻發送到后端服務介面,最后在集中處理每個請求的回應結果

//axios并發請求
//定義demo請求
function demo(){
    return axios.get("http://localhost:8989/demo");
}
//定義user請求
function user(){
    return axios.get("http://localhost:8989/user?id=11");
}
axios.all([demo(), user()]).then(axios.spread((demoRes,useRes)=>{ //并發請求
    console.log(demoRes);
    console.log(useRes);
})); 

11.2.4 攔截器

在這里插入圖片描述


12、Vue 生命周期

Vue 實體生命周期 ===> java 物件生命周期(初始化階段 運行階段 銷毀階段) 生命周期鉤子 ====> 生命周期函式

Vue實體從創建到銷毀程序中自動觸發一系列函式 ====> Vue生命周期函式(鉤子)
在這里插入圖片描述

Vue生命周期總結

# 
- 1.初始化階段
        beforeCreate(){ //1.生命周期中第一個函式,該函式在執行時Vue實體僅僅完成了自身事件的系結和生命周期函式的初始化作業,Vue實體中還沒有 Data el methods相關屬性
        console.log("beforeCreate: "+this.msg);
        },
        created(){ //2.生命周期中第二個函式,該函式在執行時Vue實體已經初始化了data屬性和methods中相關方法
        console.log("created: "+this.msg);
        },
        beforeMount(){//3.生命周期中第三個函式,該函式在執行時Vue將El中指定作用范圍作為模板編譯
        console.log("beforeMount: "+document.getElementById("sp").innerText);
        },
        mounted(){//4.生命周期中第四個函式,該函式在執行程序中,已經將資料渲染到界面中并且已經更新頁面
        console.log("Mounted: "+document.getElementById("sp").innerText);
        }

- 2.運行階段
        beforeUpdate(){//5.生命周期中第五個函式,該函式是data中資料發生變化時執行 這個事件執行時僅僅是Vue實體中data資料變化頁面顯示的依然是原始資料
        console.log("beforeUpdate:"+this.msg);
        console.log("beforeUpdate:"+document.getElementById("sp").innerText);
        },
        updated(){    //6.生命周期中第六個函式,該函式執行時data中資料發生變化,頁面中資料也發生了變化  頁面中資料已經和data中資料一致
        console.log("updated:"+this.msg);
        console.log("updated:"+document.getElementById("sp").innerText);
        },

- 3.銷毀階段
        beforeDestory(){//7.生命周期第七個函式,該函式執行時,Vue中所有資料 methods componet 都沒銷毀
        },
        destoryed(){ //8.生命周期的第八個函式,該函式執行時,Vue實體徹底銷毀
        }
        

代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue系列課程</title>
</head>
<body>
    <div id = "app">
        <h1 id="sp">{{msg}}</h1>

        <input type="button" value="修改資料" @click="changeData">
        <!--
            vue生命周期分為三個階段:
                1.初始化階段
                     beforeCreate(){ //1.生命周期中第一個函式,該函式在執行時Vue實體僅僅完成了自身事件的系結和生命周期函式的初始化作業,Vue實體中還沒有 Data el methods相關屬性
                        console.log("beforeCreate: "+this.msg);
                    },
                    created(){   //2.生命周期中第二個函式,該函式在執行時Vue實體已經初始化了data屬性和methods中相關方法
                        console.log("created: "+this.msg);
                    },
                    beforeMount(){//3.生命周期中第三個函式,該函式在執行時Vue將El中指定作用范圍作為模板編譯
                        console.log("beforeMount: "+document.getElementById("sp").innerText);
                    },
                    mounted(){    //4.生命周期中第四個函式,該函式在執行程序中,已經將資料渲染到界面中并且已經更新頁面
                        console.log("Mounted: "+document.getElementById("sp").innerText);
                    }
                2.運行階段
                    beforeUpdate(){//5.生命周期中第五個函式,該函式是data中資料發生變化時執行 這個事件執行時僅僅是Vue實體中data資料變化頁面顯示的依然是原始資料
                        console.log("beforeUpdate:"+this.msg);
                        console.log("beforeUpdate:"+document.getElementById("sp").innerText);
                    },
                    updated(){    //6.生命周期中第六個函式,該函式執行時data中資料發生變化,頁面中資料也發生了變化  頁面中資料已經和data中資料一致
                        console.log("updated:"+this.msg);
                        console.log("updated:"+document.getElementById("sp").innerText);
                    },
                3.銷毀階段
                    beforeDestory(){//7.生命周期第七個函式,該函式執行時,Vue中所有資料 methods componet 都沒銷毀
                        },
                    destoryed(){ //8.生命周期的第八個函式,該函式執行時,Vue實體徹底銷毀
                    }
        -->
    </div>
</body>
</html>
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el: "#app",
        data:{
            msg:"vue 生命周期",
        },
        methods:{
            changeData(){
                this.msg="vue 生命周期講解";
            }
        },
        computed:{},

        beforeCreate(){ //1.生命周期中第一個函式,該函式在執行時Vue實體僅僅完成了自身事件的系結和生命周期函式的初始化作業,Vue實體中還沒有 Data el methods相關屬性
            console.log("beforeCreate: "+this.msg);
        },
        created(){   //2.生命周期中第二個函式,該函式在執行時Vue實體已經初始化了data屬性和methods中相關方法
            console.log("created: "+this.msg);
        },
        beforeMount(){//3.生命周期中第三個函式,該函式在執行時Vue將El中指定作用范圍作為模板編譯
            console.log("beforeMount: "+document.getElementById("sp").innerText);
        },
        mounted(){    //4.生命周期中第四個函式,該函式在執行程序中,已經將資料渲染到界面中并且已經更新頁面
            console.log("Mounted: "+document.getElementById("sp").innerText);
        },
        beforeUpdate(){//5.生命周期中第五個函式,該函式是data中資料發生變化時執行 這個事件執行時僅僅是Vue實體中data資料變化頁面顯示的依然是原始資料
            console.log("beforeUpdate:"+this.msg);
            console.log("beforeUpdate:"+document.getElementById("sp").innerText);
        },
        updated(){    //6.生命周期中第六個函式,該函式執行時data中資料發生變化,頁面中資料也發生了變化  頁面中資料已經和data中資料一致
            console.log("updated:"+this.msg);
            console.log("updated:"+document.getElementById("sp").innerText);
        },
        beforeDestory(){//7.生命周期第七個函式,該函式執行時,Vue中所有資料 methods componet 都沒銷毀
        },
        destoryed(){ //8.生命周期的第八個函式,該函式執行時,Vue實體徹底銷毀
        }
    });
</script>

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/290928.html

標籤:其他

上一篇:Git 工 具, 看這篇保姆式的教程就夠了

下一篇:25個 Vue 技巧,開發了5年了,有些竟然還是第一次見!

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more