VUE基础使用与监听器和计算属性

目录

Vue简介

什么是Dom

vue的安装

第一个Vue程序(Hello Vue)

el挂载点相关问题

       Vue实例的作用范围是什么呢?

        是否可以使用其他的选择器?

        是否可以设置其他的dom元素呢

data:数据对象

 vue模板语法

        插值操作 Mustache

        v-html

        v-text

        v-bind

        v-show

        v-if

        v-for

        v-on

        v-for遍历数组

        v-modl表单绑定

        v-model结合radio类型使用

        v-model结合checkbox类型使用

        v-model结合select类型使用

                下拉框单选        

             下拉框多选

        值绑定

        检测数组更新

        计算属性 computed

         监听器watch

生命周期

Transition动画的class

        使用vue的transition标签结合css样式完成动画

        当插入或删除包含在 transition 组件中的元素时,Vue 将会做以下处理:



Vue简介

        JavaScript框架、简化Dom操作、 响应式数据驱动

什么是Dom

        document文档 object 对象 model模型,Dom翻译中文:文档对象模型

vue的安装

// 开发环境版本, 包含了帮助的命令行警告
<srcipt src='https://cdn.jsdeliver.net/npm/vue/dist/vue.js'></script>

// 生产环境版本, 优化了尺寸和速度
<srcipt src='https://cdn.jsdeliver.net/npm/vue'></script>

第一个Vue程序(Hello Vue)

        导入开发版本的Vue.js

        创建Vue实例对象,设置el属性和data属性

        使用简洁的模板语法把数据渲染到页面上

el挂载点相关问题

       Vue实例的作用范围是什么呢?

                Vue会管理el选项命中的元素及其内部的后代元素

        是否可以使用其他的选择器?

                当然是可以的 我们可以使用class , 还有css里面其它一些标签等等,开发建议选择Id选择器

        是否可以设置其他的dom元素呢

                可以使用其他的双标签,但不能使用HTML和BODY

下面简单展示的第一个Vue程序、el挂载点使用例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.6.1.js"></script>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        $(function () {
    //         Vue实例的作用范围是什么呢 ?
    //             Vue会管理el选项命中的元素及其内部的后代元素

    //         是否可以使用其他的选择器 ?
    //             可以使用其他的选择器, 但是建议使用ID选择器

    //         是否可以设置其他的dom元素呢 ?
    //             可以使用其他的双标签, 不能使用HTML和BODY
            var app = new Vue({
                el: "#app",
                // el: ".app", 使用类选择器
                // el: "div", 标签选择器
                data: {
                    message: "阿士大夫撒地方是"
                }
            })
        })
    </script>
</head>
<body>
    <div id="app" class="app">
        {{message}}
    </div>
</body>

</html>

data:数据对象

        Vue中用到的数据定义在data中

        data中可以写复杂类型的数据

        渲染复杂类型数据时,遵守js的语法即可

下面简单展示关于对象和数组的使用例子:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.6.1.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        $(function () {
            // 1.Vue中用到的数据定义在data中
            // 2.data中可以写复杂类型的数据
            // 3.渲染复杂类型数据时, 遵守js的语法即可
            var app = new Vue({
                el: "#app1",
                data: {
                    message: "阿士大夫撒地方是",
                    school: {
                        name: '鳖精打学',
                        mobile: '13456789'
                    },
                    campus: ['asaf', 'dfa', '456']
                }
            })
        })
    </script>
</head>

<body>
    <div id="app1">
        {{message}}
        <h2>{{school.name}}{{school.mobile}}</h2>
        <ul>
            <li>{{campus[0]}}</li>
            <li>{{campus[1]}}</li>
            <li>{{campus[2]}}</li>
        </ul>
    </div>
</body>

</html>

 vue模板语法

        插值操作 Mustache

                Mustache语法 (双大括号)

                可以直接写变量

                可以写简单的表达式

插值操作 Mustache代码如下:

<h2>沙发上{{message+'!'}}</h2>

        v-html

        v-html指令的作用是:设置元素的innerHTML,内容中有html结构会被解析为标签,v-text指令无论内容是什么,只会解析为文本

v-html指令代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.6.1.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        $(function () {
            var app = new Vue({
                el: '#app',
                data: {
                    content: '<h1>v-html会解析标签</h1>',
                    content2: '<h1>v-text只解析文本</h1>'
                }
            })
        })
    </script>
</head>

<body>
    <div id="app">
        <!-- v-html指令的作用是:设置元素的innerHTML
        内容中有html结构会被解析为标签
        v-text指令无论内容是什么,只会解析为文本 -->
        <div>
            <p>132</p>
            <p>132</p>
            <p>798</p>
        </div>
        <div v-html="content">
            <p>132</p>
            <p>132</p>
            <p>798</p>
        </div>
        <div v-text="content2">
        </div>
    </div>
</body>

</html>

        v-text

         v- text指令的作用是: 设置标签的内容(textContent),默认写法会替换全部内容, 使用插值表达式可以替换指定内容,内部支持写表达式

v-text指令代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.6.1.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        $(function () {
            var app = new Vue({
                el: '#app',
                data: {
                
                    message: '哈哈哈'
                }
            })
        })
    </script>
</head>

<body>
    <div id="app">
        <!--
        v- text指令的作用是: 设置标签的内容(textContent)
        默认写法会替换全部内容, 使用差值表达式份可以替换指定内容
        内部支持写表达式  -->
        {{message+'!'}}
        <h2 v-text="message+'!'">变变变</h2>
        <h2>沙发上{{message+'!'}}</h2>
    </div>
</body>

</html>

        v-bind

 v-bind代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.6.1.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        $(function () {
            var app = new Vue({
                el: '#app',
                data: {
                    imgSrc: './img/怪兽1.webp',
                    isActive: false,
                },
                methods: {
                    show: function () {
                        this.isActive = !this.isActive
                    },
                }
            })
        })
    </script>
    <style>
        .active {
            border: 1px solid rgb(218, 32, 32);
        }
    </style>
</head>

<body>
    <div id="app">
        <!-- v-bind指令的作用是:为元素绑定属性
        完整写法是v-bind:属性名
        简写的话可以直接省略v-bind,只保留:属性名
        需要动态的增删class建议使用对象的方式 -->
        <!--三元运算符的形式 :true就添加类名,false就为空-->
        <img :src="imgSrc" alt="" @click="show" :class="isActive?'active':''">
        <!--对象的形式: active值是否生效取决于isActive -->
        <img :src="imgSrc" alt="" @click="show" :class="{'active':isActive}">
    </div>
</body>

</html>

        v-show

v-show代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.6.1.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        $(function () {
            var app = new Vue({
                el: '#app',
                data: {
                    isShow: false,
                    age: 17
                },
                methods: {
                    show: function () {
                        this.isShow = !this.isShow
                    },
                    add: function () {
                        this.age++;
                    }
                }
            })
        })
    </script>
</head>

<body>
    <div id="app">
        <!-- v-show指令的作用是:根据真假切换元素的显示状态
        原理是修改元素的display,实现显示隐藏
        指令后面的内容,最终都会解析为布尔值
        值为true元素显示,值为false元素隐藏
        数据改变之后,对应元素的显示状态会同步更新 -->
        <img v-show="isShow" src="./img/怪兽1.webp" alt="">
        <img v-show="age>18" src="./img/怪兽2.webp" alt="">
        <button @click="show">显示</button>
        <button @click="add">增加年龄</button>
    </div>
</body>

</html>

        v-if

 v-if代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.6.1.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        $(function () {
            var app = new Vue({
                el: '#app',
                data: {
                    isShow: false,
                    age: 19
                },
                methods: {
                    show: function () {
                        this.isShow = !this.isShow
                    },
                }
            })
        })
    </script>
</head>

<body>
    <div id="app">
        <!-- v-if指令的作用是:根据表达式的真假切换元素的显示状态
        本质是通过操纵dom元素来切换显示状态
        表达式的值为true,元素存在于dom树中,为false,从dom树中移除
        频繁的切换v-show,反之使用v-if,前者的切换消耗小
         -->
         <input type="button" value="切换显示" @click="show">
         <p v-if="isShow">if是从dom树中移除</p>
         <p v-show="isShow">show是display显示隐藏</p>
         <h2 v-if="age>18">符合条件显示</h2>
    </div>
</body>

</html>

        v-for

v-for代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.6.1.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        $(function () {
            var app = new Vue({
                el: '#app',
                data: {
                    arr: ['困困1', '困困2', '困困3', '困困4'],
                    arr2: [
                        { name: '大坤吧' },
                        { name: '大坤吧' },
                        { name: '大坤吧' }
                    ]
                },
                methods: {
                    add:function() {
                        this.arr2.push({name:'大坤吧'})
                    },
                    remove:function(){
                        this.arr2.shift()
                    }
                }
            })
        })
    </script>
</head>

<body>
    <div id="app">
        <!-- v-for指令的作用是:根据数据生成列表结构
        数组经常和v-for结合使用
        语法是( item,index ) in数据
        item和index可以结合其他指令一起使用
        数组长度的更新会同步到页面上,是响应式的 -->
        <button @click="add">添加</button>
        <button @click="remove">删除</button>
        <ul>
            <li v-for="(item,index) in arr">{{item}}阿斯蒂芬{{index}}</li>
        </ul>
        <p v-for="item in arr2">{{item}}</p>
    </div>
</body>

</html>

        v-on

v-on代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.6.1.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        $(function () {
            var app = new Vue({
                el: '#app',
                data: {

                },
                methods: {
                    add: function (k) {
                        console.log('adsaf');
                        console.log(k);
                    },
                    key: function (key) {
                        console.log(key);

                    }
                }
            })
        })
    </script>
</head>

<body>
    <div id="app">
        <!-- 
        事件绑定的方法写成函数调用的形式,可以传入自定义参数
        定义方法时需要定义形参来接收传入的实参
        事件的后面跟上.修饰符可以对事件进行限制
        .enter可以限制触发的按键为回车
        事件修饰符有多种 -->
        <input type="button" value="点击" @click="add('ikun')">
 <!--<div class="item1" @click="click1">
            <div class="item2" @click.self="click2">
                <div class="item3" @click="click3"></div>
            </div>
        </div> -->
        <input type="text" @keyup.enter="key('回车了')">
    </div>
</body>

</html>
修饰符作用实际调用
.stop阻止事件冒泡

 @事件名.self

.prevent阻止默认事件@事件名.prevent
.self阻止y元素冒泡到自己-
.native监听组件根元素的原生事件-
.once只触发一次回调-

        v-for遍历数组

v-for代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.6.1.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        $(function () {
            var app = new Vue({
                el: '#app',
                data: {
                    arr: ['困困1', '困困2', '困困3', '困困4'],
                    arr2: [
                        { name: '大坤吧' },
                        { name: '大坤吧' },
                        { name: '大坤吧' }
                    ]
                },
                methods: {
                    add:function() {
                        this.arr2.push({name:'大坤吧'})
                    },
                    remove:function(){
                        this.arr2.shift()
                    }
                }
            })
        })
    </script>
</head>

<body>
    <div id="app">
        <!-- v-for指令的作用是:根据数据生成列表结构
        数组经常和v-for结合使用
        语法是( item,index ) in数据
        item和index可以结合其他指令一起使用
        数组长度的更新会同步到页面上,是响应式的 -->
        <button @click="add">添加</button>
        <button @click="remove">删除</button>
        <ul>
            <li v-for="(item,index) in arr">{{item}}阿斯蒂芬{{index}}</li>
        </ul>
        <p v-for="item in arr2">{{item}}</p>
    </div>
</body>

</html>

        v-modl表单绑定

v-modl表单绑定代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.6.1.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        $(function () {
            var app = new Vue({
                el: '#app',
                data: {
                    message: 'hehehe',
                },
                methods: {
                    add: function (k) {
                        this.message ='飞机砸蛋'
                    },
                    key: function (key) {
                     alert('修改成功')
                     this.message=''
                    }
                }
            })
        })
    </script>
</head>

<body>
    <div id="app">
        <!-- 
        v-model指令的作用是便捷的设置和获取表单元素的值
        绑定的数据会和表单元素值相关联
        绑定的数据一→表单元素的值 -->
        <input type="button" value="修改message" @click="add">
        <input type="text" v-model="message" @keyup.enter="key">
        <p>{{message}}</p>
    </div>
</body>

</html>

        v-model结合radio类型使用

v-model结合radio类型使用代码:

<div id="app">
    <label for="male">
        <inout type="radio" id="male" value="男" v-model="sex">男
    </label>
    <label for="male">
        <inout type="radio" id="female" value="女" v-model="sex">nv
    </label>
    <h2>您选择的性别是: {{sex}}</h2>
</div>

cosnt app = new Vue({
    el: '#app',
    data: {
        sex: '男'
    }
})

        v-model结合checkbox类型使用

v-model结合checkbox单选框类型使用:

// 需求: 是否同意该协议, 同意后下一步

<div id="app">
    <label for="agree">
        <inout type="checkbox" id="agree"  v-model="isAgree">同意协议
    </label>
    <buttion :disabled="!isAgree">下一步</button>
</div>

cosnt app = new Vue({
    el: '#app',
    data: {
        isAgree: false
    }
})

// 点击文字部分也可以选中

v-model结合checkbox多选框类型使用:

<div id="app">
    <label for="agree">
        <inout type="checkbox" value="足球" v-model="hobbies">足球
    </label>
    <label for="agree">
        <inout type="checkbox" value="篮球" v-model="hobbies">篮球
    </label>
    <label for="agree">
        <inout type="checkbox" value="羽毛球" v-model="hobbies">羽毛球
    </label>
    <h2>您的爱好是: {{hobbies}}</h2>
</div>

cosnt app = new Vue({
    el: '#app',
    data: {
        isAgree: false,
        hobbies: []
    }
})

        v-model结合select类型使用

                下拉框单选        

                v-model绑定的是一个值

                当选中option中一个时, 会将它对应的value赋值到mySelect中

v-model结合 下拉框单选类型使用:

<select v-model="mySelect">
    <option value="apple">苹果<option>
    <option value="orange">橘子<option>
    <option value="banana">香蕉<option>
</select>
<p>您最喜欢的水果: {{mySelect}}</p>

             下拉框多选

                v-model绑定的是一个数组

                当选择多个值时,会将选中的option对应的value添加到数组mySelect中

v-model结合 下拉框多选类型使用:

<select v-model="mySelect" multiple>
    <option value="apple">苹果<option>
    <option value="orange">橘子<option>
    <option value="banana">香蕉<option>
</select>
<p>您最喜欢的水果: {{mySelect}}</p>

        值绑定

                含义: 动态的给value赋值
                1 在前面的value中的值, 都是在定义input的时候直接给定的
                2 但真实开发中, input的值可能是从网络获取或定义在data中的
                3 可以通过v-bind:value动态的给value绑定值

值绑定代码:

<div id="app">
    <label v-for="item in nums" :for="item">
        <inout type="checkbox" value="item" :id="item" v-model="hobbies">{{item}}
    </label>
    <h2>您的爱好是: {{hobbies}}</h2>
</div>

cosnt app = new Vue({
    el: '#app',
    data: {
        hobbies: [],
        nums: ['篮球', '足球', '羽毛球']
    }
})

        检测数组更新

                Vue是响应式, 所以当数据发生变化时, Vue会自动检测数据变化, 视图会发生对应的更新.

                Vue中观察数据编译的方法 – 用它们改变数组会触发视觉更新

数组响应式方法作用
push()在数组中最后增加元素
pop()删除数组中最后一个元素
shift()删除数组中的第一个元素
unshift()在数组最前面添加元素
splice()删除 / 插入 / 替换元素
sort()xx
reverse()xx

        计算属性 computed

 计算属性 computed代码 :

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.6.1.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        $(function () {
            var app = new Vue({
                el: '#app',
                data: {
                    firstName: 'li',
                    lastName: 'er',
                    result3:''
                },
                computed: {
                    fullName: {
                        // 一般没有set方法 
                        set: function (value) {

                        },
                        // 只读属性
                        get: function () {
                            return this.firstName + '' + this.lastName
                        }
                    }
                },
              
                methods: {
                },
            })
        })

    </script>
</head>

<body>
    <div id="app">
        {{fullName}}
        {{result3}}
    </div>
</body>

</html>

         监听器watch

监听器watch代码:


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.6.1.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        $(function () {
            var app = new Vue({
                el: '#app',
                data: {
                    name: '123',
                    name1: '2',
                    form: {
                        name: '132132'
                    },
                    arr1: [1, 2, 3],
                },
                watch: {
                    // 方法1
                    // 把要监听的name值看作方法名,来进行监听。
                    name(newVal, oldVal) {
                        console.log('newVal', newVal);// 1234
                        console.log('oldVal', oldVal);// 123
                    },

                    //方法2
                    name1: {
                        // 把要监听的name值看作对象,利用hanler方法来进行监听
                        handler(newVal, oldVal) {
                            console.log('newVal', newVal); // 1234
                            console.log('oldVal', oldVal); // 123
                        }
                    },

                    // 高级用法
                    // 监听普通变量的变化可以使用以上两种方法,但是要监听变量值是某对象或者数组的时候,则不起作用。
                    // 例如,我们监听form对象内部属性的变化,是监听不到的。
                    // watch方法提供了一个deep属性(深度监听),该属性可以监听到对象内部属性的改变。
                    form: {
                        deep: true,
                        handler(newVal, oldVal) {
                            console.log('newVal', newVal);
                            console.log('oldVal', oldVal);
                        }
                    },

                    // 数组用法1
                    // (一维、多维)数组的变化不需要深度监听
                    arr1(newVal, oldVal) {
                        console.log('newVal1', newVal);
                        console.log('oldVal1', oldVal);
                    },
                    arr2(newVal, oldVal) {
                        console.log('newVal2', newVal);
                        console.log('oldVal2', oldVal);
                    },

                    //数组用法2
                    // 数组对象中对象属性变化监测需要使用deep:true深度监听,多少层内产生变化都可以监测到
                    arr1: {
                        handler(newVal, oldVal) {
                            console.log('newVal1', newVal);
                            console.log('oldVal1', oldVal);
                        },
                        deep: true
                    },
                    arr2: {
                        handler(newVal, oldVal) {
                            console.log('newVal2', newVal);
                            console.log('oldVal2', oldVal);
                        },
                        deep: true
                    }
                },
            methods: {
                fun(){
                    console.log(this.arr1);
                }
        },
            })
        })

    </script>
</head>

<body>
    <div id="app">
        <input type="text" v-model="name">
        <input type="text" v-model="name1">
        <input type="text" v-model="form.name">
        <input type="text" v-model="arr1">
        <button @click="fun">arr1</button>
    </div>
</body>

</html>

生命周期

生命周期:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.6.1.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        $(function () {
            var app = new Vue({
                el: '#app',
                data: {
                },

                methods: {
                    msg() {

                    }
                },
                beforeCreate() {//创建前
                    // 前beforecreate
                    //  data methods计算属性监听器没有初始化完成,不能用,修改没有用
                    //  vue生命周期种只执行一次
                    console.log('创建前');
                },
                created() {//创建后
                    //后created*
                    //  data methods计算属性监听器初始化完成,可以修改,不触发update
                    //  可以做数据处理
                    //  发送请求获取数据
                    //  vue生命周期种只执行一次
                    console.log('创建后');
                },
                beforeMount() {//挂载前beforeMount
                    //vue生命周期种只执行一次
                    //虚拟dom还没有转为真实dom
                    console.log('挂载前');
                },
                mounted() {//挂载后mounted
                    //vue生命周期种只执行一次已经渲染为真实dom
                    //修改数据会触发update
                    //开启定时器
                    console.log('挂载后');
                },
                beforeUpdate() {//修改前beforeUpdate
                    //使用vue的数据是修改前的数据
                    console.log('修改前');
                },
                updated() {//修改后updated*
                    //使用vue的数据是修改后的数据
                    console.log('修改后');
                },
                beforeDestroy() {//销毁前beforeDestopy
                    //关闭定时器
                    console.log('销毁前');
                },
                destroyed() {//销毁后destroyed
                    console.log('销毁后');
                },
            })
        })

    </script>
</head>

<body>
    <div id="app">
        <!-- 生命周期:
                    创建
                        
                    挂载
                        前beforeMount
                            vue生命周期种只执行一次
                            虚拟dom还没有转为真实dom
                        后mounted*
                            vue生命周期种只执行一次已经渲染为真实dom
                            修改数据会触发update
                            开启定时器
                    更新
                        前beforeupdate
                            使用vue的数据是修改前的数据
                        后updated*
                            使用vue的数据是修改后的数据
                    销毁
                        前beforeDestopy *
                            关闭定时器
                        后destroyed

                    ref="注册名":写在标签上,用来向vue实例中注册元素对象
                    $refs,vue实例的属性,用来获取注册的元素对象,在挂载后可用
                面试题: 说说你对vue生命周期的理解 -->
        <p></p>
        <button @click="msg"></button>
    </div>
</body>

</html>

Transition动画的class

        一、使用vue的transition标签结合css样式完成动画

                1、给需要运动的元素加入transition标签

              <transition>

                       需要运动的元素

              </transition>

               2、默认情况下如果控制了transition标签元素的显示和隐藏它会默认给这个元素加入一些class

            隐藏:加入类名:

               v-leave :定义离开过渡的开始状态。

               v-leave-active :定义离开过渡生效时的状态。

               v-leave-to :定义离开过渡的结束状态。

            显示:加入类名:

               v-enter:  准备进行运动的状态(起始状态)

              v-enter-active:  整个运动状态

              v-enter-to:  整个运动状态(强调运动的结果,结束状态)

                3、将来如果给transition设置一个name为“show”以后,将来所有的类的名称都需要改变,默认前缀为v- 如果加入了name属性,需要将v- 改为show-

        当插入或删除包含在 transition 组件中的元素时,Vue 将会做以下处理:

        (1)自动嗅探目标元素是否应用了 CSS 过渡或动画,如果是,在恰当的时机添加/删除 CSS 类名。

        (2)如果过渡组件提供了 JavaScript 钩子函数,这些钩子函数将在恰当的时机被调用。

        (3)如果没有找到 JavaScript 钩子并且也没有检测到 CSS 过渡/动画,DOM 操作 (插入/删除) 在下一帧中立即执行。(注意:此指浏览器逐帧动画机制,和 Vue 的 nextTick 概念不同)

                  

       对于这些在过渡中切换的类名来说,如果使用一个没有名字的 <transition>,则 v- 是这些类名的默认前缀。如果你使用了 <transition name="my-transition">,那么 v-enter 会替换为 my-transition-enter。

                v-enter-active 和 v-leave-active 可以控制进入/离开过渡的不同的缓和曲线

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值