Vue第三天 生命周期和vue请求+动画

目录

今日任务

1.学习vue生命周期函数

2. 学习vue-resource的使用

3. 学习axios的使用

一、知识点

1、什么是生命周期

2、vue生命周期钩子函数

3、vue生命周期

 4. vue-resource的使用

5. axios的使用

示例:

6.Vue中的动画

6.1 使用过渡类名

6.2 使用第三方css动画库

导入动画类库:

定义 transition 及属性:

6.3 使用动画钩子函数

6.4 v-for的列表过渡

定义过渡样式:

示例:

定义DOM结构,其中,需要使用 transition-group 组件把v-for循环的列表包裹起来:

6.5 列表的排序过渡

 要使用这个新功能只需了解新增的 v-move 特性,它会在元素的改变定位的过程中应用。

6.6vue中的列表动画


今日任务

1.学习vue生命周期函数

2. 学习vue-resource的使用

3. 学习axios的使用

一、知识点

1、什么是生命周期

从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期!

2、vue生命周期钩子函数

每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

生命周期函数=生命周期事件=生命周期钩子

3、vue生命周期

示例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
    <script src="../vue-2.4.0.js"></script>
   
</head>
<body>
    <div id='app'>
        <div>{{msg}}</div>
        <input type="text" v-model="msg">


    </div>

    <script>
    const vm = new Vue({
        el: '#app',
        data: {
            msg:"太难了,家人们",


        },
        methods: {
        },
        //生命周期
        beforeCreate(){
            //一般用于页面重定向
            console.log('beforeCreate');
            console.log(this.msg);
        },
        created(){
            //一般用于接口请求,数据初始化
            console.log('created');
            console.log(this.msg);
        },
        beforMount(){
            //页面数据未更新,在内存中已经解析好模板,虚拟dom,尚未挂载到页面,此时页面还是旧的
            console.log('beforMount');
        },
        mounted(){
            //页面更新完成,需要依赖dom的操作,在此完成
            console.log('mounted');
        },
        beforeUpdate(){
            //触发0次或多次,数据更新前
            console.log("beforeUpdate");
            console.log(this.msg);
        },
        updated(){
            //数据更新后
            console.log("updated");
            console.log(this.msg);
        },
        //组件销毁前,清楚定时器还有页面监听
        beforeDestroy(){
            console.log('beforeDestroy');
        },
        destroyed(){
            console.log('destroyed');
        },
    })
    </script>
</body>
</html>

 4. vue-resource的使用

  • 直接在页面中,通过script标签,引入vue-resource的脚本文件;

  • 注意:引用的先后顺序是 - 先引用Vue的脚本文件,再引用vue-resource的脚本文件

  • 示例:

  • <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title></title>
        <script src="../vue-2.4.0.js"></script>
        <!-- 引用的先后顺序是 - 先引用Vue的脚本文件,再引用vue-resource的脚本文件 -->
        <script src="../vue-resource-1.3.4.js"></script>
    
        <style>
            img{
                width: 100%;
            }
    
            ul{
                display: flex;
                flex-wrap: wrap;
            }
            li{
                width: 20%;
                padding: 10px;
                box-sizing: border-box;
                /* height: 120px; */
                /* background-color: aqua; */
            }
        </style>
    </head>
    <body>
        <div id='app'>
    
            <select name="" id="">
                <option value="" v-for="(item,index) in subjectList" :key="index">{{item.title}}</option>
            </select>
    
            <div v-for="(item,index) in imgList" :key="index">
                <img :src="item.imgUrlPc" alt="">
            </div>
    
            <ul>
                <li v-for="(item,index) in courseList" :key="index">
                    <div><img :src="item.coverFileUrl" alt=""></div>
                    <div>{{item.courseTitle}}</div>
                    <div>免费</div>
                    
                </li>
            </ul>
        </div>
    
    
        <script>
        const vm = new Vue({
            el: '#app',
            data: {
                imgList:[],
                courseList:[],
                subjectList:[],
            },
            methods: {
            },
            created() {
                // 接口请求 数据初始化
                // get
                this.$http.get("http://wkt.myhope365.com/weChat/applet/course/banner/list?number=3").then(
                    (res)=>{
                        // console.log(res);
                        this.imgList = res.data.data
                    }
                )
    
                // post
                this.$http.post("http://wkt.myhope365.com/weChat/applet/course/list/type",{type:'free',pageSize:10,pageNum:1},{ emulateJSON: true }).then((res)=>{
                    // console.log(res);
                    this.courseList = res.data.rows
                })
    
    
                // post json
                this.$http.post("http://wkt.myhope365.com/weChat/applet/subject/list",{"enable":1}).then((res)=>{
                    // console.log(res);
                    this.subjectList = res.data.rows
                })
    
                this.$http.post("http://wkt.myhope365.com/system/dict/data/list/open",{"dictType":'blogroll',pageNum:1,pageSize:10,orderByColumn:'dictSort',isAsc:'asc'},{ emulateJSON: true }).then((res)=>{
                    console.log(res);
                    
                })
            },
        })
        </script>
    </body>
    </html>

    5. axios的使用

  • Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中。

  • 示例:

  • <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title></title>
        <script src="../vue-2.4.0.js"></script>
        <script src="../axios.js"></script>
        <style>
            ul{
                display: flex;
                flex-wrap: wrap;
            }
    
            ul li{
                width: 20%;
                padding: 10px;
                box-sizing: border-box;
            }
            img {
                width: 100%;
                height: 170px;
            }
            li {
                list-style: none;
            }
        </style>
    </head>
    <body>
        <div id='app'>
    
            <select name="" id="">
                <option value="" v-for="(item,index) in subjectList" :key="index">{{item.title}}</option>
            </select>
    
            <div v-for="(item,index) in imgList" :key="index">
                <img :src="item.imgUrlPc" alt="">
            </div>
            <h3>免费课程</h3>
            <ul>
                <li v-for="(item,index) in courseList" :key="index">
                    <div><img :src="item.coverFileUrl" alt=""></div>
                    <div>{{item.courseTitle}}</div>
                    <div>免费</div>
                </li>
            </ul>
            <h3> 精品课程</h3>
            <ul>
                <li v-for="(item,index) in boutiqueCourseList" :key="index">
                    <div><img :src="item.coverFileUrl" alt=""></div>
                    <div>{{item.courseTitle}}</div>
                    <div v-if="item.isFree ==1">免费</div>
                    <div  v-else-if="item.isDiscount == 1">打折 <del>原价:{{item.coursePrice}} </del> 现价{{item.discountPrice}} </div>
                    <div  v-else>现价{{item.discountPrice}} </div>
                </li>
            </ul>
    
            <h3>限时折扣</h3>
             <ul>
                <li v-for="(item,index) in boutiqueList" :key="index">
                    <div><img :src="item.coverFileUrl" alt=""></div>
                    <div>{{item.courseTitle}}</div>
                    <div v-if="item.isFree ==1">免费</div>
                    <div  v-else-if="item.isDiscount == 1">打折 <del>原价:{{item.coursePrice}} </del> 现价{{item.discountPrice}} </div>
                    <div  v-else>现价{{item.discountPrice}} </div>
                </li>
            </ul>
            <h3>头条精选</h3>
            <ul>
                <li v-for="(item,index) in boutiqueList" :key="index">
                    <div><img :src="item.coverFileUrl" alt=""></div>
                    <div>{{item.courseTitle}}</div>
                    <div v-if="item.isFree ==1">免费</div>
                   <!--  <div  v-else-if="item.isDiscount == 1">打折 <del>原价:{{item.coursePrice}} </del> 现价{{item.discountPrice}} </div>
                    <div  v-else>现价{{item.discountPrice}} </div> -->
                </li>
            </ul>
        </div>
    
    
        <script>
        const vm = new Vue({
            el: '#app',
            data: {
                imgList:[],
                courseList:[],
                subjectList:[],
                boutiqueCourseList:[],
                boutiqueList:[],
                dataList:[],
            },
            methods: {
            },
            created() {
                // get
                axios.get("http://wkt.myhope365.com/weChat/applet/course/banner/list?number=3").then((res) => {
                    // console.log(res);
                    this.imgList = res.data.data
                })
                // post
                // 内置对象
                let url = new URLSearchParams()
                // 参数一 属性名称,参数二 属性值
                url.append('type','free')
                url.append('pageSize',10)
                url.append('pageNum',1)
                axios.post("http://wkt.myhope365.com/weChat/applet/course/list/type",url).then((res)=>{
                    // console.log(res);
                    this.courseList = res.data.rows
                })
    
    
                   // 内置对象
                   let url2 = new URLSearchParams()
                // 参数一 属性名称,参数二 属性值
                url2.append('type','boutique')
                url2.append('pageSize',5)
                url2.append('pageNum',1)
                axios.post("http://wkt.myhope365.com/weChat/applet/course/list/type",url2).then((res)=>{
                    // console.log(res);
                    this.boutiqueCourseList = res.data.rows
                })
    
    
                 
                 
                 axios.post("http://wkt.myhope365.com/weChat/applet/subject/list",{"enable":1}).then((res)=>{
                    // console.log(res);
                    this.subjectList = res.data.rows
                })
    
                let url3 = new URLSearchParams()
                url3.append('type','discount')
                url3.append('pageNum',1)
                url3.append('pageSize',5)
                axios.post("http://wkt.myhope365.com/weChat/applet/course/list/type",url3).then((res)=>{
                    // console.log(res);
                    this.boutiqueList = res.data.rows
                })
    
                let url4 = new URLSearchParams()
                url4.append('type','boutique')
                url4.append('pageSize',5)
                url4.append('pageNum',1)
                axios.post("http://wkt.myhope365.com/weChat/applet/course/list/type",url2).then((res)=>{
                    // console.log(res);
                    this.dataList = res.data.rows
                })
                
            },
        })
        </script>
    </body>
    </html>

    6.Vue中的动画

  • 6.1 使用过渡类名

  • <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title></title>
        <script src="../vue-2.4.0.js"></script>
        <style>
           /*  @keyframes identifier {
    
            } */
            /* 入场动画 */
            .v-enter{
                transform: translateX(200px);
                opacity: 0;
                
            }
            .v-enter-active{
                transition: 1s all;
            }
            .v-enter-to{
                transform: translateX(0px);
            }
            /* 离场动画 */
            .v-leave{
                transform: translateX(0px);
            }
            .v-leave-active{
                transition:1s all;
            }
            .v-leave-to{
                transform: translateX(200px);
            }
    
            /* 定义进入过渡的开始状态 和 离开过渡的结束状态 */
            .fade-enter-active,
            .fade-leave-active{
                transition: all 0.2s ease;
                position: absolute;
            }
            /* 定义进入过渡的开始状态 和 离开过渡的结束状态 */
            .fade-enter,
            .fade-leave-to {
                opacity: 0;
                transform: translateX();
            }
                
        </style>
    </head>
    <body>
        <div id='app'>
            <button @click="flag=!flag">更改显示模式</button>
            <!-- 没有name都用v开头的6个类名 -->
            <transition>
                <div v-if="flag">天蝎座</div>
            </transition>
            <!-- 定义name后,设置动画,把v换成name -->
            <transition name="fade">
                <div v-if="flag">处女座</div>
            </transition>
        </div>
    
        <script>
        const vm = new Vue({
            el: '#app',
            data: {
                flag:true
            },
            methods: {
            }
        })
        </script>
    </body>
    </html>

    6.2 使用第三方css动画库

  • 导入动画类库:

  • <link rel="stylesheet" type="text/css" href="./lib/animate.css">

  • 定义 transition 及属性:

  •  <transition
               enter-active-class="animate__fadeInBottomRight"
               leave-active-class="animate__fadeOutTopLeft"
               >
                   <div v-if="flag" class="animate__animated"> 哈哈</div>
                  
               </transition>

    6.3 使用动画钩子函数

  • <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title></title>
        <script src="../vue-2.4.0.js"></script>
        <style>
            .show{
                transition: all 2s;
            }
        </style>
    </head>
    
    <body>
        <div id='app'>
            <input type="button" value="切换动画" @click="isshow = !isshow">
            <transition @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter">
                <div v-if="isshow" class="show">OK</div>
            </transition>
    
        </div>
    
        <script>
            const vm = new Vue({
                el: '#app',
                data: {
                    isshow: true
                },
                methods: {
                    beforeEnter(el) { // 动画进入之前的回调
                        console.log(el);
                        el.style.transform = 'translateX(500px)';
                    },
                    enter(el, done) { // 动画进入完成时候的回调
                        console.log(done);
                        el.offsetWidth;
                        el.style.transform = 'translateX(0px)';
                        done();
                    },
                    afterEnter(el) { // 动画进入完成之后的回调
                        // console.log("3333");
                        this.isshow = !this.isshow;
                    }
    
                }
            })
        </script>
    </body>
    
    </html>

    6.4 v-for的列表过渡

  • 定义过渡样式:

  • 示例:

  • <style>

      .list-enter,
      .list-leave-to {
        opacity: 0;
        transform: translateY(10px);
      }

      .list-enter-active,
      .list-leave-active {
        transition: all 0.3s ease;
      }
    </style>

    定义DOM结构,其中,需要使用 transition-group 组件把v-for循环的列表包裹起来:

  • <div id="app">

      <input type="text" v-model="txt" @keyup.enter="add">
      <transition-group tag="ul" name="list">
        <li v-for="(item, i) in list" :key="i">{{item}}</li>
      </transition-group>
    </div>

  • 定义 VM中的结构:

  • // 创建 Vue 实例,得到 ViewModel

      var vm = new Vue({
        el: '#app',
        data: {
          txt: '',
          list: [1, 2, 3, 4]
        },
        methods: {
          add() {
            this.list.push(this.txt);
            this.txt = '';
          }
        }
      });

  • 6.5 列表的排序过渡

    <transition-group> 组件还有一个特殊之处。不仅可以进入和离开动画,还可以改变定位。

 要使用这个新功能只需了解新增的 v-move 特性,它会在元素的改变定位的过程中应用。

v-move 和 v-leave-active 结合使用,能够让列表的过渡更加平缓柔和:

.v-move{

transition: all 0.8s ease;
}
.v-leave-active{
position: absolute;
}

6.6vue中的列表动画

示例:

目录

今日任务

1.学习vue生命周期函数

2. 学习vue-resource的使用

3. 学习axios的使用

一、知识点

1、什么是生命周期

2、vue生命周期钩子函数

3、vue生命周期

 4. vue-resource的使用

5. axios的使用

示例:

6.Vue中的动画

6.1 使用过渡类名

6.2 使用第三方css动画库

导入动画类库:

定义 transition 及属性:

6.3 使用动画钩子函数

6.4 v-for的列表过渡

定义过渡样式:

示例:

定义DOM结构,其中,需要使用 transition-group 组件把v-for循环的列表包裹起来:

6.5 列表的排序过渡

 要使用这个新功能只需了解新增的 v-move 特性,它会在元素的改变定位的过程中应用。

6.6vue中的列表动画


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值