vue中配置全局变量、动画、组件

本文介绍了在Vue中配置全局变量、实现动画效果以及组件的多种定义方式,包括在components中定义和在vue实例中定义组件。同时,探讨了组件的切换方法,如通过v-if/v-else和标签切换,并讨论了组件的动画切换效果。
1、配置全局变量
				1.配置全局的根域名
Vue.http.options.root='根访问路径'
				2.配置全局的emulateJSON(ajax返回数据为json)
Vue.http.options.emulateJSON=true
2、动画
	使用标签<transition></transition>来显示动画的内容
    使用钩子函数实现半场动画
    使用标签<transition-group></transition-group>来实现列表动画
            使用.v-move和.v-leave-active配合使用能够实现列表的后续效果
            给标签添加appear实现入场的动画效果,添加tag属性来指定渲染后的标签为ul,默认为span 
<style type="text/css">
        .v-enter,
        .v-leave-to{
            transform: translateX(150px);
            transition: opacity 0.5s;
        }
        
        .v-enter-to,
        .v-leave{
            transition: all 0.8s ease;
        }
        
        
        .my-enter,
        .my-leave-to{
            transform: translateX(150px);
            transition: opacity 0.5s;
        }
        
        .my-enter-to,
        .my-leave{    
            transition: all 0.8s ease;    
        }
        
    </style>
    <body>
        <div id="app">
            <input type="button" value="切换" @click="toggle">
            <transition>
                <p v-if="flag">{{msg}}</p>
            </transition>
            <hr>
            <!-- 使用自定义前缀来定义动画的样式 -->
            <input type="button" value="切换" @click="toggle2">
            <transition name="my">
                <p v-if="flag2">{{msg}}</p>
            </transition>
            <hr>
            <!-- 使用第三方样式并使用duration来设定动画入场和离场 的时间 -->
            <!-- <input type="button" value="切换" @click="toggle3">
            <transition enter-active-class="animated bounceIn" leave-active-class="animated bounceOut" :duration="2000">
                  <h3 v-if="flag3">这是一个H3</h3>
            </transition> -->
            
            <!-- 使用第三方样式并使用duration来  分别设定动画入场和离场的时间 -->
            <input type="button" value="切换" @click="toggle3">
            <transition enter-active-class="bounceIn" leave-active-class="bounceOut" :duration="{enter:400,leave:600}">
                  <h3 v-if="flag3" class="animated">这是一个H3</h3>
            </transition>
        </div>
    </body>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#app',
            data:{
                msg:'动画的内容',
                flag:true,
                flag2:true,
                flag3:true
            },
            methods:{
                toggle(){
                    this.flag = !this.flag;
                    
                },
                toggle2(){
                    this.flag2 = !this.flag2;
                    
                },
                toggle3(){
                    this.flag3 = !this.flag3;
                    
                }
            }
        
        })
        
    </script>
			*使用钩子函数实现半场动画*
<style type="text/css">
        #boll{
            width: 20px;
            height: 20px;
            border-radius: 20px;
            background-color: red;
        }
    </style>
    <body>
        
        <div id="app">
            <input type="button" value="快到碗里来" @click="flag=!flag">
            <transition
            @before-enter="before_enter"
            @enter="entering"
            @after-enter="enter_after">
                <div id="boll" v-show="flag"></div>
            </transition>
            
        </div>
        
    
    </body>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#app',
            data:{
                flag:false
            },
            methods:{
                before_enter(el){
                    el.style.transform = "translate(0, 0)"
                },
                entering(el,done){
                     // 这句话,没有实际的作用,但是,如果不写,出不来动画效果;
                      // 可以认为 el.offsetWidth 会强制动画刷新
                      el.offsetWidth
                      // enter 表示动画 开始之后的样式,这里,可以设置小球完成动画之后的,结束状态
                      el.style.transform = "translate(150px, 450px)"
                      el.style.transition = 'all 0.5s ease'
                      // 这里的 done, 起始就是 enter_after 这个函数,也就是说:done 是enter_after函数的引用
                      done();
                },
                enter_after(el){
                      this.flag = !this.flag
                    
                }
                
            }
            
        })
    </script>
<style type="text/css">
        li{
            border:1px dashed lightsteelblue;
            font-weight: 30px;
            font-size: 14px;
            line-height: 40px;
            padding-left: 10px;
            width: 100%;
            list-style: none;
        }
        li:hover {
              background-color: pink;
              transition: all 0.8s ease;
        }
        
        .v-enter,
        .v-leave-to{
            opacity: 0;
            transform: translateY(80px);
        }
        .v-enter-active,
        .v-leave-active{
            transition: all 0.6s ease;
        }
        /* 入场的动画效果 */
        .v-move{
            transition: all 0.7s ease;
        }
        .v-leave-active{
            position: absolute;
        }


    </style>
    <body>
        <div id="app">
            id:<input type="text" id="" v-model:value="id" />
            name:<input type="text" id="" v-model:value="name" />
            <input type="button" value="添加" @click="add">
            <!-- appear属性为添加入场的动画,tag属性将渲染的标签为ul,默认是span -->
            <transition-group appear tag="ul">
                <li v-for="(user,i) in arr" @click="del(i)" :key="user.id">{{user.id}}======={{user.name}}</li>
            </transition-group>
        </div>
    </body>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#app',
            data:{
                id:null,
                name:null,
                arr:[
                    {id:1,name:'小明'},
                    {id:2,name:'小华'},
                    {id:3,name:'小李'},
                    {id:4,name:'小红'},
                    {id:5,name:'小美'}
                ]
            },
            methods:{
                del(id){
                    this.arr.splice(id,1);
                },
                add(){
                    this.arr.push({id:this.id,name:this.name});
                    this.id = this.name = null;
                }
            }
        })
    </script>
3、组件

1.定义组件的方式1:

<mycom></mycom>  

  var componetm = Vue.extend({
            template:'<h2>定义组件的方式1</h2>'
        });
        Vue.component('mycom',componetm);

2.定义组件的方式2:

Vue.component('mycomponent2',{
            template:'<div><h4>定义组件的方式2</h4><span>hello</span></div>'
        })

3.定义组件的方式3:

<template id="template1">
            
            <div>
                <p>定义组建的方式3</p>
            </div>
  </template>



Vue.component('mycomponent3',{
            template:'#template1'
        })

在components中定义组件:
在vue实例中定义:
Components:{

                        组件名:{

                                        template:‘模板代码’
                            }

                }
    
    组件中的data数据必须为一个方法且方法的返回值为对象,与vue实例中的data数据不同
<body>
        <div id="app">
            <mycomponent></mycomponent>
        </div>
    </body>
    <script type="text/javascript">
        
        Vue.component('mycomponent',{
            template:'<h3>定义一个私有的组件</h3>',
            /* 组建的data必须为一个方法,且方法的返回值必须为对象 */
            data:function(){
                return {msg:'hello,world'}
            }
            
        })
        var vm = new Vue({
            el:'#app',
            data:{},
            methods:{}
        })
    </script>

组件的切换方式1:
使用v-if和v-else来改变flag的值进行切换

<body>
        <div id="app">
            <input type="button" value="登录" @click="flag=true">
            <input type="button" value="注册" @click="flag=false">
            <div v-if="flag">
                登录的页面
            </div>
            <div v-else="flag">
                注册的页面
            </div>
        </div>
    </body>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#app',
            data:{
                flag:true
            },
            methods:{
            }
        })
    </script>

组件的切换方式2:
使用标签来进行切换
组件动画切换组件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值