Vue(一)初识

简介: Vue(一)初识

Vue的意义:将开发者的精力从dom操作解脱,更加专注于数据的操作,

数据驱动,界面的渲染 随着数据的变化自动变化

   1.将开发者的精力从dom中解除, 极少做dom操作

   2.通过指令(directive)将元素和数据进行绑定  

   3.数据变化元素界面变化

   4.开发者关注数据的变化

配置:Vue官网下载;或npm install vue


js引入包后,实例化Vue对象;

var vm = new Vue({//实例化
             el: '#btn',//选择标签(作用区域)
             data: {//变量(数据),关联页面的标签
                    bool: true
                },
            methods:{//写方法的对象
                Fn1(){//方法
                        },
                Fn2(){
                        }
                }
            });

       

渲染数据:

<div id='app'>{{name}}</div>//用插值的方式{{}}来放置data的变量

Vue的数据是双向数据的绑定,数据相互依赖,缺点是源头很难找到,但是提升了数据的感知


指令:

v-if(条件渲染)

<p v-if='bool'></p>//条件满足时显示元素
<p v-else></p>//否则显示元素
<p v-else-if='bool'></p>//条件满足时显示元素

v-for(列表渲染)用for in和for of都行(注意:若遍历数组的时候有重复项,要用一个bind绑定数据否则会出错,如

  • {{item}}--{{index}}

//数组
<li v-for='item in list'>{{item}}</li>//item是每一项,list是操作的数组(根据list的长度新建li)
<li v-for='(item,index) in list'>{{item}}--{{index}}</li>//item是每一项,index是数组索引,list是操作的数组(根据list的长度新建li)
<li v-for='item in 20'>{{item}}</li>//直接创造20个li
//字符串
<li v-for='item in "hello vue"'>{{item}}</li>//遍历字符串,输出9个li分别是字符每一项
//对象
<li v-for="(val,key,index) in obj">{{key}}:{{val}}---{{index}}</li>//val,key,index分别是对象的每项的属性,属性名,索引

v-click(事件指令)

<button v-on:click="test">点我</button>//类似于onclick,test是Vue实例化中的函数
//v-on:click相当于@click
<a v-on:click.stop="doThis"></a>//取消冒泡事件
<div v-on:click.self="doThat">...</div>//只有点击这个元素自身才会触发

v-bind(属性设置)

<div v-bind:class='state?"red":"green"'>//v-bind:'属性名'='属性值'
//可以写成<div v-bind:class='state?"red":"green"'>

过滤器:(对数据进行处理的函数)

全局过滤器:和局部过滤的区别(局部过滤器只能在当前的组件中使用)

<!DOCTYPE html>
<html lang="en">
    <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>Document</title>
        <style>
        </style>
        <script src="./vue.js"></script>
    </head>
    <body>
        <div id="box">
            {{nowTime|getTime}}
            <!--  这是参数   这是过滤,中间用|隔开-->
        </div>
        <script>
            //全局过滤
            Vue.filter('getTime', function (value) {
                //中间可以写对数据的处理
                return value;
            });
            var vm = new Vue({
                el: '#box',
                data: {
                    nowTime: Date.now()
                }
            });
        </script>
    </body>
</html>


局部过滤:

<!DOCTYPE html>
<html lang="en">
    <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>Document</title>
        <style>
        </style>
        <script src="./vue.js"></script>
    </head>
    <body>
        <div id="box">
            {{nowTime|getTime}}
            <!--  这是参数   这是过滤,中间用|隔开-->
        </div>
        <script>
            //局部过滤
            var vm = new Vue({
                el: '#box',
                data: {
                    nowTime: Date.now()
                },
                filters: {
                    getTime: function (value) {
                        //中间可以写对数据的处理
                        return value;
                    }
                }
            });
        </script>
    </body>
</html>

组件:就是vue的一个拓展实例

全局组件:(整个页面都能使用)

<template id="tp1">
            <!-- 组件创建 -->
            <div></div>
</template>
var mod = {//组件配置
                template: '#tp1',//选中组件
                data() {
                    return {
                    //写变量
                }
                },
                methods: {
                    //写函数
                }
            }
Vue.component('mod', mod);//注册组件
//直接在页面中输入
<mod></mod>
//即可使用

局部组件:(只能在当前选中作用范围中使用)

let box = new Vue({
                el: '#box',//当前作用范围是id为box的标签内
                data: {
                },
                methods: {
                },
                components: {//新建局部组件
                    mod: ({
                        template: '#tp1',
                        data() {
                            return {}
                        },
                        methods: {
                        }
                    })
                }
            });

组件间数据的传输:(类似事件抛发和监听)

父组件传给子组件:

<!DOCTYPE html>
<html lang="en">
    <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>Document</title>
        <script src="./vue.js"></script>
    </head>
    <body>
        <div id="box">
            <fat></fat>
        </div>
        <!-- 子组件 -->
        <template id="son">
            <div>{{callson}}</div>
        </template>
        <!-- 父组件,父组件中包含子组件 -->
        <template id="fat">
            <div>
                <!-- 当父组件数据改变时,通过将数据保存在自身属性的方法传输 -->
                <div>{{fbool}}</div>
                <button @click='change'>Change</button>
                <!-- 将callson作为属性,附带数据传输给子元素 -->
                <son :callson='fbool'></son>
            </div>
        </template>
        <script>
            Vue.component('son', {
                template: '#son',
                data: function () {
                    return {
                    }
                },
                props: ['callson'] //子组件在该处接收数据
            });
            Vue.component('fat', {
                template: '#fat',
                data: function () {
                    return {
                        fbool: false
                    }
                },
                methods: { //点击父组件的按钮时,父组件内数据改变
                    change() {
                        this.fbool = !this.fbool;
                    }
                }
            });
            var box = new Vue({
                el: '#box'
            });
        </script>
    </body>
</html>

子组件传给父组件:

<!DOCTYPE html>
<html lang="en">
    <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>Document</title>
        <script src="./vue.js"></script>
    </head>
    <body>
        <div id="box">
            <fat></fat>
        </div>
        <template id="son">
            <div>
                <button @click='change'>Change</button>
                <!-- <div>{{sbool}}</div> -->
            </div>
        </template>
        <template id="fat">
            <div>
                <div>{{fbool}}</div>
                <!-- 新建自定义事件,绑定父元素中的函数,传参数写在后面用逗号隔开 -->
                <son @callfat='changeF'></son>
                <!-- 当子元素被点击时触发父元素的方法 -->
            </div>
        </template>
        <script>
            Vue.component('son', {//点击子组件的按钮时,子组件内数据改变
                template: '#son',
                data: function () {
                    return {
                        sbool: false
                    }
                },
                methods: {
                    change() {
                        this.$emit('callfat');
                        this.sbool = !this.sbool;
                    }
                }
            });
            Vue.component('fat', { 
                template: '#fat',
                data: function () {
                    return {
                        fbool: false
                    }
                },
                methods: {
                    changeF() {
                        this.fbool = !this.fbool;
                    }
                }
            });
            var box = new Vue({
                el: '#box'
            });
        </script>
    </body>
</html>


兄弟组件:(结合子传父,父再传子):

<!DOCTYPE html>
<html lang="en">
    <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>Document</title>
        <script src="./vue.js"></script>
    </head>
    <body>
        <div id="box">
            <fat></fat>
        </div>
        <template id="sonf">
            <div>
                <button @click='change'>Change</button>
                <div>First <br>{{sfbool}}</div>
            </div>
        </template>
        <template id="sons">
            <div>Second <br>{{callson}}</div>
        </template>
        <template id="fat">
            <div>
                <sonf @callfat='changeF'></sonf>
                <sons :callson='fbool'></sons>
            </div>
        </template>
        <script>
            Vue.component('sonf', {
                template: '#sonf',
                data: function () {
                    return {
                        sfbool: false
                    }
                },
                methods: {
                    change() {
                        this.$emit('callfat');
                        this.sfbool = !this.sfbool;
                    }
                }
            });
            Vue.component('sons', {
                template: '#sons',
                data: function () {
                    return {
                    }
                },
                props: ['callson']
            });
            Vue.component('fat', {
                template: '#fat',
                data: function () {
                    return {
                        fbool: false
                    }
                },
                methods: {
                    changeF() {
                        this.fbool = !this.fbool;
                    }
                }
            });
            var box = new Vue({
                el: '#box'
            });
        </script>
    </body>
</html>

不相邻兄弟组件:

let angel=new Vue();//引入一个Vue实例
angel.$emit('test','Hello')//传送方在函数中抛出事件及数据
angel.$on('test',this.change)//接收方接收事件及数据


动画:

<transition name='aaa'>css中用name值进行动画
若中间有1个以上元素,需要在外面嵌套一个元素,再给该元素加
    <div v-if='show'>
      <p>Hello</p>
        <p>World</p>
    </div>
</transition>
        .aaa-enter{进入前
      opacity: 0;
    }
    .aaa-enter-to{进入后
      opacity: 1;
    }
    .aaa-enter-active{过渡时间
      transition: all 3s;
    }
    .aaa-leave{离开前
      opacity: 1;
    }
    .aaa-leave-to{离开后
      opacity: 0;
    }
    .aaa-leave-active{过渡时间
      transition: all 3s;
    }
相关文章
|
6天前
|
缓存 监控 JavaScript
探讨优化Vue应用性能和加载速度的策略
【5月更文挑战第17天】本文探讨了优化Vue应用性能和加载速度的策略:1) 精简代码和组件拆分以减少冗余;2) 使用计算属性和侦听器、懒加载、预加载和预获取优化路由;3) 数据懒加载和防抖节流处理高频事件;4) 图片压缩和选择合适格式,使用CDN加速资源加载;5) 利用浏览器缓存和组件缓存提高效率;6) 使用Vue Devtools和性能分析工具监控及调试。通过这些方法,可提升用户在复杂应用中的体验。
21 0
|
7天前
|
JavaScript 前端开发
vue(1),小白看完都会了
vue(1),小白看完都会了
|
7天前
|
JavaScript 数据库
ant design vue日期组件怎么清空 取消默认当天日期
ant design vue日期组件怎么清空 取消默认当天日期
|
7天前
|
JavaScript C++
vue高亮显示组件--转载
vue高亮显示组件--转载
12 0
|
1天前
|
JavaScript
vue知识点
vue知识点
11 4
|
2天前
|
JavaScript Java 关系型数据库
基于SprinBoot+vue的租房管理系统2
基于SprinBoot+vue的租房管理系统2
9 0
|
2天前
|
自然语言处理 JavaScript 数据可视化
5个值得推荐的Vue后台管理框架
几个优秀好看的 Vue 后台管理框架,每个框架都有自己的特点和优势,开发者可以根据项目需求选择适合的框架。
15 0
|
6天前
|
JavaScript 开发工具 git
Vue 入门系列:.env 环境变量
Vue 入门系列:.env 环境变量
13 1
|
7天前
|
JavaScript 前端开发 定位技术
Vue使用地图以及实现轨迹回放 附完整代码
Vue使用地图以及实现轨迹回放 附完整代码
Vue使用地图以及实现轨迹回放 附完整代码
|
7天前
|
JavaScript
Vue中避免滥用this去读取data中数据
Vue中避免滥用this去读取data中数据