袁磊老师的课,VUE(六)

  • 一、 Vue组件Component
    组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码
  1. 第一步:创建组件:var component = Vue.extend(配置项)
  2. 第二步:注册组件:
    ①全局组件 Vue.component(组件名.component)
    ②局部组件:component:{‘组件名’:component}
  3. template 要尽量跟着反引号·· (反引号在哪里??ESC键子下面的键子就是了,和~键子是一个哦)
  4. 全局的组件一定要定义在new Vue({})的前面,不能是中间,也不能是后面
    练习1
    基础知识点都在代码的注释里啦~
<!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>Component基础</title>
</head>
<style>
    .com {
        border: 1px solid pink;
        width: 300px;
        padding: 10px;
        margin: 10px;
        font-size: 30px;
        box-shadow: 5px 5px 5px peachpuff;

    }

    .dlist {
        border: 1px solid pink;
        padding: 10px;
        margin: 10px;
    }

    .tr-enter,
    .tr-leave-to {
        opacity: 0;
        transform: translateX(20px);
    }

    .tr-enter-to,
    .tr-leave {
        opacity: 1;
    }

    .tr-enter-active,
    .tr-leave-active {
        transition: all 0.6s;
    }
</style>

<body>
    <div id="app">
        <yuan></yuan>
        <yuan></yuan>

        <lei></lei>
        <lei></lei>
        <lei></lei>
    </div>

    <script src="vue.js"></script>
    <script>
        // 第一个参数是名字,第二个参数是这个组件对应拥有的属性
        Vue.component("yuan", {
            // 墙裂建议!template要用反引号,只有在反引号里面才可以加单双引号进行各种功能的添加
            // template中一定要有一个根元素,即只能有一个根元素,不能有很多并列的祖宗元素
            template: `<div class="com" @click="add">自定义组件 {{count}}</div>`,
            // 组件的数据一定要以函数的形式存在!!!
            data() {
                //!!!!!注意!!!!! data的形式一定要以返回的形式给出来
                return {
                    count: 0
                    // 数据的调用,和正常的方式一样,双花括号就行
                }
            },
            // 上面template模板中有一个点击事件,就可以写在下面的methods中,和正常的书写方式一样
            methods: {
                add: function () {
                    this.count++;
                    // 当我们点击组件的时候,就加1
                }
            },
        })

        var vm = new Vue({
            el: "#app",
            // 局部组件
            components: {
                "lei": {
                    // 定义组件的时候,第一步是定义html元素,html元素要写在template之中
                    // 写transition-group的时候一定要绑定一个key,key是不同的值,key能够区别每个动画的不同
                    template: `
                    <div class="dlist" @click =""> 
                        <transition-group name = "tr">
                            <div v-for="(v,i) in dlist" :key="i">
                                <span>{{v.id}}</span>
                                <span>{{v.title}}</span>
                                <button @click="del(i)">删除</button>
                            </div>
                        </transition-group>
                    </div>`,
                    data: function () {
                        return {
                            dlist: [{
                                    id: 1,
                                    title: "这里是标题1"
                                },
                                {
                                    id: 2,
                                    title: "这里是标题2"
                                },
                                {
                                    id: 3,
                                    title: "这里是标题3"
                                },
                                {
                                    id: 4,
                                    title: "这里是标题4"
                                },
                            ]
                        }
                    },
                    methods: {
                        del(index) {
                            this.dlist.splice(index, 1);
                        }
                    },
                }
            }

        })
    </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>vue父子组件</title>
    <style>
        h2 {
            padding: 0;
            margin: 0;
        }

        .title {
            border-bottom: 2px solid #c00;
            height: 32px;
            line-height: 32px;
            width: 400px;
            position: relative;
        }

        .title h2 {
            text-indent: 18px;
            font-size: 14px;
            color: #c00;
        }

        .title a {
            text-decoration: none;
            color: #aaa;
            font-size: 14px;
            position: absolute;
            top: 5px;
            right: 5px;
        }
    </style>
</head>

<body>
    <div id="app">
        <h2>从子组件中获得的数据:{{msg}}</h2>
        <com link="0509zujian.html" @zdyevent="getmsg">新闻</com>
        <com link="http://baidu.com">娱乐</com>

    </div>
    <script src="vue.js"></script>
    <script>
        var template = `<div class="title"><h2 @click="send">
        <slot></slot></h2>
        <a :href="link">更多>></a>
        </div>
        `;

        Vue.component("com", {
            template,
            props: ['link'],
            methods: {
                send() {
                    this.$emit("zdyevent", "xxxxxx"); //xxxxxx是数据
                }
            },
        });

        new Vue({
            el: "#app",
            data: {
                msg: ""
            },
            methods: {
                getmsg(val) {
                    this.msg = val;
                }
            }
        })
    </script>
</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值