vue从入门到放弃——(7) 组件的基本使用

本文深入解析Vue.js中的组件概念,包括全局组件与局部组件的区别、定义及调用方式,通过实例展示组件如何封装可重用代码,扩展HTML标签功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是组件

组件的概念:

组件即自定义控件,是Vue.js最强大的功能之一

组件的用途:

组件能够封装可重用代码,扩展HTML标签功能

组件的本质:

自定义标签

组件的分类

全局组件

作用域:不同作用域内均可使用

局部组件

作用域:只在定义该组件的作用域内可以使用

注意:Vue组件只有全局组件和局部组件两种

全局组件

语法:

Vue.component(‘name’, {
     	   template:<div></div1>});

全局组件的定义

定义位置:创建实例前定义全局组件

template的设置:
template:‘html代码’
template:‘#template1’引用template内容

数据的定义:
data:function(){
return {a:1,b:2}
}

函数的定义:

methods:{

​ 函数名:function(){}
}

全局组件的调用

组件的调用方法:<组件名></组件名>
组件的作用域:全局范围内均可调用

注意:

1.我们在创建组件的时候如果使用了驼峰命名法,那么在调用组件的时候需要把大写的内容转换为小写前面加-

eg:

<my-com></my-com>
全局组件定义eg:
<!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>
</head>

<body>
    <div id="demodiv">
        <!--
            我们在创建组件的时候如果使用了驼峰命名法 
            那么在调用组件的时候需要把大写的内容转小写  前面加-
        -->
        <my-coma></my-coma>
        <my-comb></my-comb>
        <my-comc></my-comc>
        <my-comd></my-comd>
    </div>
    <template id="tem">
        <div>
            <p>外部模板1</p>
            <p>外部模板2</p>
            <p>外部模板3</p>
            <p>外部模板4</p>
        </div>
    </template>
    <template id="temb">
        <div>
            <h1>组件内部变量创建</h1>
            <p @click="fun()">{{text}}</p>
        </div>
    </template>
</body>

</html>
<script src="node_modules/vue/dist/vue.min.js"></script>
<script>
    // 创建基本的全局组件  全局组件就是在那个vue实例中都可以使用的组件
    // 第一个参数是组件的名字,
    // 第二个参数是对象  里面包含着组件的一些相关属性
    Vue.component("myComa", {
        // 组件模板
        template: "<p>我是基础的全局组件</p>"
    })
    // 基本组件创建多个标签(如果有多个HTML标签的话那么!!!必须必须必须!!!需要在外部有个父容器包裹)
    Vue.component("myComb", {
        // 组件模板
        template: "<div><p>22222我是基础的全局组件</p><p>1111我是基础的全局组件</p></div>"
    })

    // 全局组件的外置模板(解决写内置模板的时候所有的不爽)
    Vue.component("myComc", {
        // 引用外部组件模板 
        // 1.必须先要创建外部组件模板书写位置 在vue管理的视图之外创建    template标签来创建
        // 2.把组件和外部模板建立关系
        template: "#tem"
    })

    // 在组件内部如何创建变量和函数
    // data:function(){return {}}
    Vue.component("myComd", {
        template: "#temb",
        data() {
            return {
                text: "我是一个变量"
            }
        },
        methods: {
            fun() {
                alert("aaaaaaaaa")
            }
        }
    })
    new Vue({
        el: "#demodiv",
        data: {}
    })
</script>

局部组件

语法:components

定义位置:实例配置项中定义,和el同级,组件不使用实例的数据

剩下的和全局组件没什么太大的区别

eg:

<!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>
</head>

<body>
    <div id="demodiv">
        <!-- 局部组件定义    局部组件只能在当前定义组件的vue实例中进行使用
            
            定义局部组件的时候!!!!一定一定要注意单词   components
        -->

        <my-com></my-com>
    </div>
    <template id="tem">
        <div>
            <p>{{text}}</p>
            <p>我是一个局部组件</p>
            <p @click="fun()">我是一个局部组件</p>
        </div>
    </template>

</body>

</html>
<script src="node_modules/vue/dist/vue.min.js"></script>
<script>
    new Vue({
        el: "#demodiv",
        data: {},
        components: {
            // 组件的名字:对象(就是当前组件的一些属性)
            "myCom": {
                template: "#tem",
                data() {
                    return {
                        text: "我是局部组件的变量"
                    }
                },
                methods: {
                    fun() {
                        alert(this.text)
                    }
                }
            }
        }
    })
</script>
组件ex:
<!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>
        *{
            margin: 0;
            padding: 0;
        }
        .oUl{
            list-style-type: none;
            margin-top: 50px;
            position: fixed;
            bottom: 0;
            width: 100%;
        }
        .oLi{
            width: 20%;
            height: 60px;
            text-align: center;
            border-top: 1px solid red;
            float: left;
        }
    </style>
</head>

<body>
    <div class="box">
        <com-a></com-a>
    </div>
    <template id="tem">
        <div>
            <ul class="oUl">
                <li v-for="(v,i) in arr"  class="oLi">
                    ![在这里插入图片描述]()
                </li>
            </ul>
        </div>
    </template>
</body>

</html>
<script src=" ./node_modules/vue/dist/vue.min.js"> </script> <script>

    new Vue({
        el: ".box",
        data: {},
        components: {
            "comA": {
                template: "#tem",
                data() {
                    return {
                        arr: [
                            { "img": "./img/1.png" },
                            { "img": "./img/2.png" },
                            { "img": "./img/3.png" },
                            { "img": "./img/4.png" },
                            { "img": "./img/5.png" }
                        ]
                    }
                }
            }
        }
    })
</script>
效果图如下

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值