vue动画 -组件

Vue 提供了 transition 的封装组件,在下列情形中,可以给任何元素和组件添加 entering/leaving 过渡

.fade-enter-active, .fade-leave-active {
  transition: opacity .5s
}
.fade-enter, .fade-leave-active {
  opacity: 0
}
<div id="demo">
  <button v-on:click="show = !show">
    Toggle
  </button>
  <transition name="fade">
    <p v-if="show">hello</p>
  </transition>
</div>

new Vue({
  el: '#demo',
  data: {
    show: true
  }
})

组件: 差不多是一个大对象

定义一个全局组件:

//1官方写法
 <div id="box">
        <test></test>
    </div>
    <script type="text/javascript">
        //注册
        Vue.component('test', {
            template: '<div @click="change">{{msg}}</div>',
            data:function(){
                return {msg:'我的组件'}
            },
            methods:{
                change:function(){
                    //todo
                    console.log(this);
                }
            }
        });

        //创建根实例
        var vm = new Vue({
            el:'#box',
        });
    </script>
<div id="box">
         <aaa></aaa>
    </div>
<script>    
var Aaa=Vue.extend({    //创建一个“子类”
        //*组件里面放数据:
        //data必须是函数的形式,函数必须返回一个对象.
            data(){     
                return {
                msg:'11111'
                };
            },
            template:'<h3>{{msg}}</h3>'
        });
        Vue.component('aaa',Aaa);
        //var a=new Aaa();
        //console.log(a);


        var vm=new Vue({
            el:'#box'
        });
</script>

局部组件

 <div id="box">
        <test></test>
    </div>
    <script type="text/javascript">
        ///定义组件
        var testTemplate = {
            template: '<div @click="change">{{msg}}</div>',
            data:function(){
                return {msg:'我的局部组件'}
            },
            methods:{
                change:function(){
                     //todo
                    console.log(this);
                }
            }
        };

        //创建根实例
        var vm = new Vue({
            el:'#box',
            components:{
                'test': testTemplate
            }
        });
    </script>




//第二种写法
<div id="box">
        <my-aaa></my-aaa>
    </div>

    <script>
        var Aaa=Vue.extend({
            template:'<h3>{{msg}}</h3>',
            data(){
                return {
                    msg:'ddddd'
                }
            }
        });


        var vm=new Vue({
            el:'#box',
            data:{
                Sign:true
            },  
            components:{ //局部组件  component加 s=多个
                'my-aaa':Aaa
            }
        });

    </script>

模板 template

<template id="aaa">  //template 就是模板   一般组件多需要配合模板用
        <h1>标题1</h1>
        <ul>
            <li v-for="val in arr">
                {{val}}
            </li>
        </ul>
    </template>

    <script>
        var vm=new Vue({
            el:'#box',
            components:{
                'my-aaa':{
                    data(){
                        return {
                            msg:'welcome vue',
                            arr:['apple','banana','orange']
                        }
                    },
                    methods:{
                        change(){
                            this.msg='changed';
                        }
                    },
                    template:'#aaa'
                }
            }
        });

    </script>

动态组件

    <div id="box">
        <input type="button" @click="a='aaa'" value="aaa组件">
        <input type="button" @click="a='bbb'" value="bbb组件">
        <component :is="a"></component>
    </div>
    <script>
        var vm=new Vue({
            el:'#box',
            data:{
                a:'aaa'
            },
            components:{   //简单路由
                'aaa':{
                    template:'<h2>我是a组件</h2>'
                },
                'bbb':{
                    template:'<h2>我是b组件</h2>'
                }
            }
        });
    </script>

组件数据传递
子组件获取父组件的值
props[]

<div id="box">
        <aaa>
        </aaa>
    </div>

    <template id="aaa">   //模板
        <h1>11111</h1>
        <bbb :m="msg2" :mm="msg1"></bbb>  //这里  :=v-bind    msg2是aaa里面 data   return 出来的
    </template>
    <script>
        var vm=new Vue({
            el:'#box',
            data:{
                a:'aaa'
            },
            components:{
                'aaa':{
                    data(){
                        return {
                            msg1:'我是皮皮',
                            msg2:'我是父组件的数据'
                        }
                    },
                    template:'#aaa',
                    components:{
                        'bbb':{
                            props:['m','mm'],  //这里的m就是<bb> 绑定的m,必须是json格式
                            template:'<h3>我是bbb组件->{{m}}</br>{{mm}}</h3>'
                        }
                    }
                }
            }
        });

    </script>

父组件获取子组件的值
其实主要是 子组件通过$emit主动把值传给父组件,父组件通过v-on来接收

    <div id="box">
        <aaa>
        </aaa>
    </div>
    <template id="aaa"> //这里是父模板组件aaa
        <span>我是父级 -> {{msg}}</span>
        <bbb @child-msg="get"></bbb> 
        //child-msg调用下面子组件bbb的方法
    </template>
    <template id="bbb"> //这里是子组件bbb
        <h3>子组件-</h3>
        <input type="button" value="开始" @click="send">
        //执行一个send方法
    </template>
    <script>
        var vm=new Vue({
            el:'#box',
            data:{
                a:'aaa'
            },
            components:{   
                'aaa':{
                    data(){
                        return {
                            msg:111,
                            msg2:'我是父组件的数据'
                        }
                    },
                    template:'#aaa',
                    methods:{
                        get(msg){ 
                        //这里的msg就是就是下面的this.a
                        //msg=我是子组件的数据
                        // alert(msg);
                            this.msg=msg;
            //这里是吧aaa父组件里面data的msg赋值子组件传过来的msg
                        }
                    },
                    components:{
                        'bbb':{
                            data(){
                                return {
                                    a:'我是子组件的数据'
                                }
                            },
                            template:'#bbb',
                            methods:{ 
                                send(){  
    //这要是用过$emit主动把值传给父组件.$emit('方法名字',值this.a=bbb,data里面的a)
                                        this.$emit('child-msg',this.a);
                                }
                            }
                        }
                    }
                }
            }
        });

    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值