Vue(2)--生命周期函数

一、使用vue实现对数组的增删改查

1、新建vue容器--表格及编辑框

 <div id="app">
       <button @click='showEdit=true'>添加</button>
       <table>
           <thead>
               <tr>
                   <th>学号</th>
                   <th>姓名</th>
                   <th>年龄</th>
                   <th>性别</th>
                   <th>操作</th>
               </tr>
           </thead>
           <tbody>
               <tr v-for='(item,index) in students' :key='index'>
                   <td>{{item.no}}</td>
                   <td>{{item.name}}</td>
                   <td>{{item.age}}</td>
                   <td>{{item.sex}}</td>
                   <td><button @click='getOne(item.no)'>修改</button>
                      <button @click='delStudent(index)'>删除</button>
                   </td>
               </tr>
           </tbody>
       </table>
       <div id="edit" v-show='showEdit'>
           <p>学号:<input type="text" v-model='student.no' :readonly='!isAdd'></p>
           <p>姓名:<input type="text" v-model='student.name'></p>
           <p>年龄:<input type="text" v-model='student.age'></p>
           <p>性别:<input type="text" v-model='student.sex'></p>
           <p>
               <button v-if='isAdd' @click='addStudent'>添加</button>
               <button v-else @click='updateStudent'>修改</button>
               <button @click='clear'>取消</button>
           </p>
           <div class="close" @click='close'>×</div>
       </div>
   </div> 

2、给vue容器里面的表格及编辑框添加样式

<style>
        table{
            border-collapse: collapse;
        }
        th,td{
            padding: 10px;
            border: 1px solid black;
            text-align: center;
        }
        #edit{
            width: 300px;
            height: 230px;
            border: 1px solid #ccc;
            padding: 20px;
            position: fixed;
            left: 0;
            top: 0;
            right: 0;
            bottom: 0;
            margin: auto;
        }
        #edit .close{
            width: 30px;
            height: 30px;
            line-height: 30px;
            background-color: brown;
            color: white;
            font-size: 20px;
            border-radius: 50%;
            position: absolute;
            top: 10px;
            right: 10px;
            text-align: center;
            cursor: pointer;
        }
    </style>

3、引入vue

 <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.js"></script>

4、创建一个vue对象--学生对象

<script>
       new Vue({
           el:'#app',
           data:{
               students:[
                   {
                       no:'1001',
                       name:'张华',
                       age:23,
                       sex:'男'
                   },
                   {
                       no:'1002',
                       name:'陈烨',
                       age:22,
                       sex:'男'
                   },
                   {
                       no:'1003',
                       name:'刘薇',
                       age:23,
                       sex:'女'
                   },
               ],
               //是否显示编辑窗口
               showEdit:false,
               isAdd:true,
               //学生对象
               student:{
                   no:'',
                   name:'',
                   age:0,
                   sex:''
               }
           },

5、方法--添加学生对象

  methods:{
               //添加方法
                   addStudent(){
                       //将表单数据展开后,返回一个新的对象
                       let stu = {...this.student}
                       //将学生对象添加到学生数组中
                       this.students.push(stu)
                       //调用清空表单数据的方法
                       this.clear()
                   },

6、方法--清空表单数据

 //清空表单数据的方法
                   clear(){
                       this.student = {
                           no:'',
                           name:'',
                           age:0,
                           sex:''
                       }
                   },

7、方法--关闭编辑窗口

 //关闭编辑窗口
                   close(){
                       this.showEdit = false
                       this.isAdd = true
                       this.clear()
                   },

8、方法--根据学号查询学生对象

 //根据学号查询学生对象
                   getOne(no){
                       //打开编辑窗口
                       this.showEdit = true
                       //编辑窗口是修改状态
                       this.isAdd = false
                       //根据学号查询学生对象
                       let stu = this.students.find(s=>s.no===no)
                       this.student = {...stu}
                   },

9、方法--修改学生信息

//修改学生信息
                   updateStudent(){
                       //根据学号,找到原始数组中指定的学生对象
                       let stu = this.students.find(s=>s.no===this.student.no)
                       //修改数组里面学生对象的属性
                       stu.name = this.student.name
                       stu.age = this.student.age
                       stu.sex = this.student.sex
                   },

10、方法--删除学生信息

  //删除学生
                   delStudent(index){
                       if(confirm('确定删除吗?')){
                           this.students.splice(index,1)
                       }
                   }

二、vue的生命周期

1、创建一个vue容器

 <div id="app">
        <h2 id="name">{{name}}</h2>
        <h2 id="age">{{age}}</h2> 
        <div>
            <button @click='name="李四"'>修改姓名</button>
            <button @click='age=33'>修改年龄</button>
            <button @click='destroy'>不过了</button>
        </div>
    </div>

2、引入vue

<script src="../js/Vue.js"></script>

3、创建一个vue对象

 Vue.config.productionTip = false
        let vm = new Vue({
            // //指定挂载的容器
            // el:'#app',
            // //指定模板(如果有模板,vue会渲染整个模板,如果没有模板,vue会将el里面的所有内容当成模板使用)
            // template:'<div><h2>{{name}}</h2><h2>{{age}}</h2></div>',
            //数据
            data:{
                name:'张三',
                age:22
            },
            methods: {
                destroy(){
                    //调用销毁当前vue实例的方法
                    //注意:销毁后,当前vue实例对象还在,只是该对象不能在重新挂载页面
                    this.$destroy()
                }
            },

4、vue生命周期函数

4.1、beforeCreate()--创建之前(数据初始化之前)

 beforeCreate() {
                console.log('---------beforeCreate-------------')
                //这个生命周期函数,基本上不用,除非要设置Vue实例的内容
                this.__proto__.fn = function(){
                    alert('你好!')
                }
                //vue实例,已经创建完成
                console.log(this);
                //Vue实例身上的数据还没有初始化完成
                console.log(this.name+' '+this.age);
            },

4.2、created()--创建完成(数据初始化完成)【常用】

 created() {
                console.log('---------created-------------')
                //这个生命周期函数,通常用于初始化vue管理的数据,比如:发送Ajax请求会放在这里。 
                console.log(this);
                console.log(this.name+' '+this.age);
            },

4.3、beforeMount()--挂载之前(模板已经成功渲染,但是还没有将内容挂载到页面中)

 //挂载之前(模板已经成功渲染,但是还没有将内容挂载到页面中)
            beforeMount() {
                console.log('---------beforeMount-------------')
                //这个生命周期函数,基本上不用
                console.log(this.$el);
                document.querySelector('#name').innerHTML = '世界'
            },

4.4、mounted()--挂载完成(模板已经成功渲染,并将内容挂载到页面中)【常用】

 //常用
            //挂载完成(模板已经成功渲染,并且将内容挂载到页面中)
            mounted() {
                console.log('---------mounted-------------')
                //这个生命周期函数,通常用于对DOM的重新改动
                console.log(this.$el);
                document.querySelector('#name').innerHTML = '真好'
            },

4.5、beforeUpdate()--修改之前(数据已经改了,但是还没有重新挂载页面)

 //修改之前(数据已经改了,只是还没有重新挂载页面)
            beforeUpdate() {
                console.log('---------beforeUpdate-------------')
                console.log(this.name+' '+this.age);
                console.log(this.$el);
            },

4.6、updated()--修改完成(数据已经改了,页面也已经重新挂载)

        //修改完成(数据已经改了,页面也已经重新挂载)
            updated() {
                console.log('---------updated-------------')
                console.log(this.name+' '+this.age);
                console.log(this.$el);
            },

4.7、beforeDestroy()--销毁之前()【常用】

       //常用
            //销毁之前()
            beforeDestroy() {
                console.log('---------beforeDestroy-------------')
                //这个生命周期函数,会用的多一些
                console.log(this);
                //对数据做任何的修改,都不会重新渲染到页面
                this.name = '王五'
            },

4.8、destroyed()--销毁完成()

 //销毁完成()
            destroyed() {
                console.log('---------destroyed-------------')
                //这个生命周期函数,几乎不用
                console.log(this);
                //对数据做任何的修改,都不会重新渲染到页面
                this.name = '王五'
            },

5、$mount方法--手动挂载容器

 setTimeout(() => {
            //通过vue实例的$mount方法,手动挂载容器
            //公共el选项指定挂载容器,当模板渲染成功后,会离开挂载页面
            //$mount方法的好处是,可以自行选择挂载的时机
            vm.$mount('#app')
        }, 1000);

三、轮播图练习

1、创建vue容器

 <div id="app" @mouseenter='mouseenter' @mouseleave='mouseleave'>
        <img :src="imgs[showActive]" alt="">
        <div class="left" @click='left'>&lt;</div>
        <div class="right" @click='right'>&gt;</div>
        <button @click='destroy'>停止播放</button>
    </div>

2、给容器添加样式

 <style>
        #app {
            position: relative;
            width: 500px;
        }

        img {
            width: 100%;
        }

        .left {
            width: 40px;
            height: 40px;
            line-height: 40px;
            color: white;
            background-color: rgba(0, 0, 0, 0.507);
            font-size: 30px;
            text-align: center;
            position: absolute;
            top: 0;
            bottom: 0;
            left: 10px;
            margin: auto 0;
        }

        .right {
            width: 40px;
            height: 40px;
            line-height: 40px;
            color: white;
            background-color: rgba(0, 0, 0, 0.507);
            font-size: 30px;
            text-align: center;
            position: absolute;
            top: 0;
            bottom: 0;
            right: 10px;
            margin: auto 0;
        }
    </style>

3、引入vue

<script src="../js/Vue.js"></script>

4、创建vue对象

 Vue.config.productionTip = false
        new Vue({
            //定义定时器
            timer: null,
            el: "#app",
            data: {
                //显示的下标
                showActive: 0,
                //图片数据
                imgs: ['https://img.alicdn.com/imgextra/i2/6000000006243/O1CN01EMp2wT1vzLMEZoBhU_!!6000000006243-0-octopus.jpg',
                    'https://gtms01.alicdn.com/tps/i1/TB1r4h8JXXXXXXoXXXXvKyzTVXX-520-280.jpg',
                    'https://img.alicdn.com/imgextra/i3/6000000004843/O1CN01MBBsqD1le8rhmNEJs_!!6000000004843-0-octopus.jpg',
                    'https://img.alicdn.com/imgextra/i2/6000000000993/O1CN01WFzF7N1JCq0y2vNPd_!!6000000000993-0-octopus.jpg',
                    'https://gtms02.alicdn.com/tps/i2/TB10vPXKpXXXXacXXXXvKyzTVXX-520-280.jpg'
                ]
            },

5、给vue对象添加方法

5.1、点击向左箭头图片往前滑动

  methods: {
                left() {
                    this.showActive--
                    //如果下标越界,重新从0开始
                    if (this.showActive < 0) {
                        this.showActive = 4
                    }
                },

5.2、点击向右箭头图片向后滑动

 right() {
                    this.showActive++
                    if (this.showActive >= 5) {
                        this.showActive = 0
                    }
                },

5.3、鼠标经过图片时图片停止滑动

 mouseenter() {
                    clearInterval(this.timer)
                },

5.4、鼠标离开时图片继续滑动

 mouseleave() {
                    this.run()
                },

5.5、打开页面图片每一秒滑动一次

 run() {
                    this.timer = setInterval(() => {
                        this.showActive++
                        //如果下标越界,查询从0开始
                        if (this.showActive >= 5) {
                            this.showActive = 0
                        }
                    }, 1000)
                },

5.6、点击停止按钮图片停止滑动

 destroy() {
                    this.$destroy()
                }

6、使用生命周期函数来实现打开页面图片滚动的效果

//生命周期函数(表示页面挂载完成)
            mounted() {
                //开启定时器
                this.run()
            },

7、在生命周期函数中,清除定时器

  //在这个生命周期函数中,清除定时器
            beforeDestroy() {
                clearInterval(this.timer)
            },
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容