Web前端 -----【Vue】(vue组件基础)一文带你了解组件的创建、注册、使用(包括组件的嵌套)

目录

前言

什么是组件

为什么使用组件化开发

组件的使用

组件的使用分为三个步骤

创建组件

为什么配置项中的data不能使用直接对象的形式,必须使用function(重点!!!面试喜欢问)

注册组件

使用组件

组件的嵌套


前言

本文介绍Vue组件,本文包括介绍如何创建组件、注册组件以及使用组件。并且包含组件的嵌套等内容

什么是组件

  1. 组件:实现应用中局部功能的代码和资源的集合。凡是采用组件方式开发的应用都可以称为组件化应用
  2. 模块:一个大的js文件按照模块化拆分规则进行拆分,生成多个js文件,每一个js文件叫做模块。凡是采用模块方式开发的应用都可以称为模块化应用
  3. 任何一个组件都可以包含这些资源:HTML、CSS、JS、图片、声音、视频等。从这个角度也可以说明组件是可以包含模块的。

为什么使用组件化开发

  1. 每一个组件都有独立的js,独立的css,这些独立的js和css只供当前组件使用,不存在从横交错,更加便于维护。
  2. 代码复用性增强。组件不仅让js css复用了,html代码片段也复用了(因为要使用组件直接引入组件即可)

组件的使用

组件的使用分为三个步骤

  1. 创建组件
  2. 注册组件
  3. 使用组件

创建组件

Vue.extend({该配置项和new Vue的配置项几乎相同,略有区别})

区别:

  1. 创建Vue组件的时候,配置项不能使用el配置项(但是需要template配置项来配置模板语句)
  2. 配置项中的data不能使用直接对象的形式,必须使用function。

例:

<div class="app">
        <h1>{{msg}}</h1>
        
    </div>
    <script>
        Vue.extend({
            template:`
            <ul>
            <li v-for="(item,index) in users" :key="item.id">
           {{index}}-----{{item.name}}
            </li>
            </ul>
            `,
            data(){
                return {
                    users:[
                    {id:'01',name:'zhangsan'},
                    {id:'02',name:'lisi'},
                    {id:'03',name:'wangwu'},
                ]
                }
            }
        })
        const vm = new Vue({
            el:'.app',
            data:{
                msg:'Vue组件',
                
            }
        })
    </script>
为什么配置项中的data不能使用直接对象的形式,必须使用function(重点!!!面试喜欢问)

如果我们直接使用对象的形式,当每次使用组件时,都是共享一份数据,这样的话就会造成页面数据混乱。应该是每个组件有自己独立的数据data,而我们使用function可以保证每次调用时,return返回的数据对象都不一样,这样就保证了数据的独立性,不会造成页面数据混乱

定义一个data,以对象的形式。a和b都指向data

let data ={

            num:1

         }

         let a = data

         let b = data

我们通过a.num和b.num直接访问

a修改data中的num为2,再通过b查看时,num已经变成了2。当b想使用num的数据时已经被修改了,所以会导致页面数据混乱

同理,将data改为funtion函数,a,b都是调用data函数

function data(){

            return {

                num:1

            }

         }

         let a = data()

         let b = data()

直接访问num

由图可以知道,当a修改data中的num为2时,b调用num依旧为1,互不影响。这样就不会造成页面数据混乱。所以配置项中的data不能使用直接对象的形式,必须使用function。

注册组件

注册组件分为局部注册和全局注册

局部注册:

在配置项当中使用components,语法格式:

components:{

        组件的名字:组件对象

}

全局注册:

Vue.component('组件的名字',组件对象)

使用组件

<组件的名字></组件的名字>

局部注册:

使用受限,只能在el配置项的容器中使用

<div class="app">
        <h1>{{msg}}</h1>
        <mylist></mylist>
    </div>
    <script>
      const myComponent =  Vue.extend({
            template:`
           <ul>
            <li v-for="(item,index) in users" :key="item.id">
           {{index}}-----{{item.name}}
            </li>
            </ul>
            `,
            data(){
                return {
                    users:[
                    {id:'01',name:'zhangsan'},
                    {id:'02',name:'lisi'},
                    {id:'03',name:'wangwu'},
                ]
                }
            }
        })
        const vm = new Vue({
            el:'.app',
            data:{
                msg:'Vue组件',
            },
            components:{
                mylist:myComponent
            }
        })
    </script>

全局注册:

可以在不同的容器中使用

 <div class="app">
        <h1>{{msg}}</h1>
        <mylist></mylist>
    </div>
    <div class="app2">
        <h1>{{msg}}</h1>
        <mylist></mylist>
    </div>
    <script>
      const myComponent =  Vue.extend({
            template:`
           <ul>
            <li v-for="(item,index) in users" :key="item.id">
           {{index}}-----{{item.name}}
            </li>
            </ul>
            `,
            data(){
                return {
                    users:[
                    {id:'01',name:'zhangsan'},
                    {id:'02',name:'lisi'},
                    {id:'03',name:'wangwu'},
                ]
                }
            }
        })
        Vue.component('mylist',myComponent)
        const vm = new Vue({
            el:'.app',
            data:{
                msg:'Vue组件',
            },
        })
        const vm2 = new Vue({
            el:'.app2',
            data:{
                msg:'全局注册',
            },
        })
    </script>

注册时可以在创建组件时,可以省略Vue.extend()

const myComponent = {

            template:`

           <ul>

            <li v-for="(item,index) in users" :key="item.id">

           {{index}}-----{{item.name}}

            </li>

            </ul>

            `,

            data(){

                return {

                    users:[

                    {id:'01',name:'zhangsan'},

                    {id:'02',name:'lisi'},

                    {id:'03',name:'wangwu'},

                ]

                }

            }

        }

        Vue.component('mylist',myComponent)

在注册时,底层会调用Vue.extend()方法,myComponent相当于一个对象传给底层去处理

组件的嵌套

如上图,最上面的就是Vue实例,第二层就是Vue实例挂载的组件,第三层就是组件的嵌套,组件挂载的组件。组件的嵌套就是给创建好的组件继续向下挂载组件,而不是挂载在Vue实例身上

<div class="app">
        <root></root>
    </div>
    <script>
        const x = {
            template:`
            <div>
                <h2>我是组件x</h2>
            </div>
            `
        }
        const y = {
            template:`
            <div>
                <h2>我是组件y</h2>
            </div>
            `
        }
        // 创建组件
        const root = {
            template:`
            <div>
                <h1>我是组件root</h1>
                <x></x>
                <y></y>
            </div>
            `,
            components:{
                x:x,
                y:y
            }
        }
        const vm= new Vue({
            el:'.app',
            components:{
                root:root
            }
        })
    </script>

如上代码,组件的嵌套也是先要遵循三步,创建,注册,使用。在哪个身上注册就要在身上应用。为了便捷,可以将组件名和组件对象同名,在对象中,key:value相同可以省略value,直接key名即可

<div class="app">

        <root></root>

    </div>

    <script>

        const x = {

            template:`

            <div>

                <h2>我是组件x</h2>

            </div>

            `

        }

        const y = {

            template:`

            <div>

                <h2>我是组件y</h2>

            </div>

            `

        }

        // 创建组件

        const root = {

            template:`

            <div>

                <h1>我是组件root</h1>

                <x></x>

                <y></y>

            </div>

            `,

            components:{x,y}

        }

        const vm= new Vue({

            el:'.app',

            components:{root}

        })

    </script>

如图,在Vue实例身上挂载了组件root,在组件身上挂载了x和y两个组件。这样组件的嵌套就完成了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/187631.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Element】el-switch开关 点击弹窗确认框时状态先改变----点击弹窗取消框失效

一、背景 需求&#xff1a;在列表中添加定期出账的开关按钮&#xff0c;点击开关时&#xff0c;原来的状态不改变&#xff0c;弹出弹窗&#xff1b;点击弹窗取消按钮&#xff1a;状态不改变&#xff0c;点击弹窗确定按钮&#xff1a;状态改变&#xff0c;并调取列表数据刷新页…

JavaWeb学习(未完结)

文章目录 一、基本概念1.1 动态Web网站简介1.2 web应用程序1.3 静态web1.4 动态web 二、web服务器2.1 技术2.2 应用服务器2.3 安装 jdk8 三、Tomcat3.1 安装 Tomcat93.2 文件说明3.3 启动并使用Tomcat3.4 关闭Tomcat3.5 可能遇到的问题3.6 配置3.6.1 修改测试访问的网页地址3.6…

水淹七军(递归,又是递归)

北大2023级最强新生问我的&#xff0c;最后他的问题说是重写了一遍就解决了 乐死了&#xff0c;有的时候根本看不出源代码漏了哪里 我的思路是&#xff1a; 一个数组记录本次放水所经过的格子&#xff0c;经过的不再递归 一个数组记录地图上各地点的高度 一个数组记录地图…

力扣日记11.25-【二叉树篇】对称二叉树

力扣日记&#xff1a;【二叉树篇】对称二叉树 日期&#xff1a;2023.11.25 参考&#xff1a;代码随想录、力扣 101. 对称二叉树 题目描述 难度&#xff1a;简单 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,…

操作无法完成错误0x0000709的解决办法,解决0x0000709错误

操作无法完成错误0x0000709是一种常见的Windows错误。这篇文章将带大家了解错误的原因&#xff0c;并提供一些解决该问题的方法&#xff0c;希望能够帮助大家解决0x0000709错误问题。 操作系统错误是我们在使用电脑时经常遇到的问题之一。其中之一就是操作无法完成错误0x000070…

Redis-主从与哨兵架构

Jedis使用 Jedis连接代码示例&#xff1a; 1、引入依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version> </dependency> 2、访问代码 public class JedisSingleTe…

超详细的Python+requests+unittest+excel接口自动化测试框架教程

一、框架结构 工程目录 在这我也准备了一份软件测试视频教程&#xff08;含接口、自动化、性能等&#xff09;&#xff0c;需要的可以直接在下方观看&#xff0c;或者直接关注VX公众号&#xff1a;互联网杂货铺&#xff0c;免费领取 软件测试视频教程观看处&#xff1a; 软件测…

ArcGis如何用点连线?

这里指的是根据已有坐标点手动连线&#xff0c;类似于mapgis中的“用点连线”&#xff0c;线的每个拐点是可以自动捕捉到坐标点的&#xff0c;比直接画精确。 我也相信这么强大的软件一定可以实现类似于比我的软件上坐标时自动生成的线&#xff0c;但是目前我还没接触到那里&a…

lv11 嵌入式开发 GPIO实验 9

目录 1 简介 1.1 GPIO 2 LED实验步骤 2.1 通过电路原理图分析LED的控制逻辑 2.2 通过电路原理图查找LED与Exynos4412的连接关系 2.3 通过数据手册分析GPIO中哪些寄存器可以控制LED 2.4 通过程序去操控对应的寄存器完成对LED的控制 2.4.1 使用寄存器写入…

SpringBoot:邮件发送

官网文档&#xff1a;39. Sending Email (spring.io)。 Sending Email Spring框架提供了JavaMailSender实例&#xff0c;用于发送邮件。 如果SpringBoot项目中包含了相关的启动器&#xff0c;那么就会自动装配一个Bean实例到项目中。 在SpringBoot项目中引入如下Email启动器&a…

十大排序之计数排序、桶排序、基数排序(详解)

文章目录 &#x1f412;个人主页&#x1f3c5;算法思维框架&#x1f4d6;前言&#xff1a; &#x1f380;计数排序 时间复杂度O(nk)&#x1f387;1. 算法步骤思想&#x1f387;2.动画实现&#x1f387; 3.代码实现 &#x1f380;桶排序&#x1f387;1. 算法步骤思想&#x1f38…

activiti流程变量操作api

文章目录 runtimeServicetaskServicedelegateTask测试绘制流程图启动流程runtimeService&taskService查询变量runtimeService&taskService设置变量 runtimeService // ## runtimeService操作的都是executionId runtimeService.startProcessInstanceByKey(processDefin…

ACL权限

ACL权限 目录&#xff1a; 1. 什么是ACL 2. 操作步骤 1. 什么是ACL ACL是Access Control List的缩写&#xff0c;即访问控制列表 每个项目成员在有一个自己的项目目录&#xff0c;对自己的目录有完全权限 项目组中的成员对项目目录也有完全权限 其他人对项目目录没有…

互联网时代的身份标识有哪些?

在互联网时代&#xff0c;我们的在线活动几乎都与IP地址相关。无论是浏览网页、观看视频&#xff0c;还是进行在线交易和沟通交流&#xff0c;我们的设备都会分配到一个独特的IP地址。然而&#xff0c;你可能并未意识到的是&#xff0c;IP地址不仅标识了我们在网络中的身份&…

MySQL 索引相关问题,建议搭建好环境,真实操作一下索引应用到的各种场景

文章目录 什么是 B-tree 和 Btree &#xff1f;B-Tree 和 BTree的区别&#xff1f;MySQL 联合唯一索引是BTree&#xff0c;会带来什么原则&#xff1f;主键索引和单字段唯一索引有什么区别吗什么是 聚簇索引和非聚簇索引 &#xff1f;创建一个三百万数据量的表格&#xff0c;方…

HCIP-七、IS-IS 综合实验

七、IS-IS 综合实验 实验拓扑实验需求及解法1.如图所示&#xff0c;配置所有路由器的接口IP地址。2.运行IS-IS&#xff0c;进程号13.IS-IS优化4.路径优化 实验拓扑 实验需求及解法 本实验模拟IS-IS综合网络&#xff0c;完成以下需求&#xff1a; 1.如图所示&#xff0c;配置所…

Acrel-2000电力监控系统在上海大世界保护修缮工程项目中的应用

摘要&#xff1a;安科瑞生产厂家1876150/-6237黄安南 介绍上海大世界电力监控系统&#xff0c;采用智能电力仪表采集配电现场的各种电参量和开关信号。系统采用现场就地组网的方式&#xff0c;组网后通过现场总线通讯并远传至后台&#xff0c;通过Acrel-2000型电力监控系统实现…

Matplotlib图形配置与样式表_Python数据分析与可视化

Matplotlib图形配置与样式表 配置图形修改默认配置rcParams样式表 Matplotlib的默认图形设置经常被用户诟病。虽然2.0版本已经有了很大改善&#xff0c;但是掌握自定义配置的方法可以让我们打造自己的艺术风格。 配置图形 我们可以通过修个单个图形配置&#xff0c;使得最终图…

搜索引擎语法

演示自定的Google hacking语法&#xff0c;解释含意以及在渗透过程中的作用 Google hacking site&#xff1a;限制搜索范围为某一网站&#xff0c;例如&#xff1a;site:baidu.com &#xff0c;可以搜索baidu.com 的一些子域名。 inurl&#xff1a;限制关键字出现在网址的某…

【数据分享】我国12.5米分辨率的坡度数据(免费获取)

地形数据&#xff0c;也叫DEM数据&#xff0c;是我们在各项研究中最常使用的数据之一。之前我们分享过源于NASA地球科学数据网站发布的12.5米分辨率DEM地形数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff0c;这个DEM数据的优点是精度高。 基于DEM地形数据&…