【Vue】Vue扫盲(四)组件化思想与简单应用

news2024/11/24 16:37:14

【Vue】Vue扫盲(一)事件标签、事件修饰符:@click.prevent @click.stop @click.stop.prevent、按键修饰符、及常用指令

【Vue】Vue扫盲(二)指令:v-for 、v-if、v-else-if、v-else、v-show

【Vue】Vue扫盲(三)计算属性和监听器

文章目录

    • 1、组件的概念
    • 2.1、组件的复用-全局组件
    • 2.2、组件的复用-局部组件

在大型应用开发的时候, 页面可以划分成很多部分。 往往不同的页面, 也会有相同的部分。 例如可能会有相同的头部导航。
但是如果每个页面都独自开发, 这无疑增加了我们开发的成本。 所以我们会把页面的不同部 分拆分成独立的组件,
然后在不同页面就可以共享这些组件, 避免重复开发。

1、组件的概念

在 vue 里, 所有的 vue 实例都是组件
在这里插入图片描述

2.1、组件的复用-全局组件

我们通过 Vue 的 component 方法来定义一个全局组件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <div id="app">
        <button v-on:click="count++">我被点击了{{count}}次</button>
        <!-- 使用抽取出来的公共组件,可以无限的被重复使用 -->
         <counter></counter>
         <counter></counter>
         <counter></counter>
         <counter></counter>
         <counter></counter>
    </div>
    <script src="../node_modules/vue/dist/vue.js"></script>
    <script>
        /* 将点击增加数量的功能抽取成一个组件 */
        //1、全局声明注册一个组件
        Vue.component("counter",{
            template:` <button v-on:click="count++">我被点击了{{count}}次</button>`,
            data(){    //特别注意:这里需要是以函数的形式对于每个使用的地方都抽取成了一个新的对象,不能以之前的{} 来返回,这样的返回的话,如果对于一个页面,则会都使用了一个data了。会互相影响所有重复的组件
                return {
                    count:1
                }
            }
        });

        
            new Vue({
                el:"#app",
                data:{
                    count:1
                }
            })
    </script>
</body>
</html>

单个组件 :
在这里插入图片描述

其中这部分是对于组件的全局抽取、使用的代码:

使用代码&全局抽取代码
注意:对于抽取的data部分:这里需要是以函数的形式对于每个使用的地方都抽取成了一个新的对象,不能以之前的{} 来返回,这样的返回的话,如果对于一个页面,则会都使用了一个data了。会互相影响

//使用代码
  <counter></counter>
         <counter></counter>
         <counter></counter>
         <counter></counter>
         <counter></counter>
、、抽取代码
 <script>
        /* 将点击增加数量的功能抽取成一个组件 */
        //1、全局声明注册一个组件
        Vue.component("counter",{
            template:` <button v-on:click="count++">我被点击了{{count}}次</button>`,
            data(){  //这里需要是以函数的形式对于每个使用的地方都抽取成了一个新的对象,不能以之前的{} 来返回,这样的返回的话,如果对于一个页面,则会都使用了一个data了。会互相影响所有重复的组件
                return {
                    count:1
                }
            }
        });

        
         
    </script>

组件被多次重复使用之后的效果
在这里插入图片描述

 组件其实也是一个 Vue 实例, 因此它在定义时也会接收: data、 methods、 生命周期函
数等
 不同的是组件不会与页面的元素绑定, 否则就无法复用了, 因此没有 el 属性。
 但是组件渲染需要 html 模板, 所以增加了 template 属性, 值就是 HTML 模板
 全局组件定义完毕, 任何 vue 实例都可以直接在 HTML 中通过组件名称来使用组件了
 data 必须是一个函数, 不再是一个对象。
因为导出的组件也是一个Vue实例,所以Vue中可以写的那些watch、computed都可以在导出的组件中写这些内容。
再次注意:组件的 data 属性必须是函数!一个组件的 data 选项必须是一个函数, 因此每个实例可以维护一份被返回对象的独立的拷
贝;因为这里需要是以函数的形式对于每个使用的地方都抽取成了一个新的对象,不能以之前的data{count:1} 来返回,因为之前这样的返回的话,如果对于一个页面,则会都使用了一个data了。会互相影响所有重复的组件的计数。

2.2、组件的复用-局部组件

一旦全局注册, 就意味着即便以后你不再使用这个组件, 它依然会随着 Vue 的加载而加载。
因此, 对于一些并不频繁使用的组件, 我们会采用局部注册;

示例
我们先在外部定义一个对象, 结构与创建全局组件时传递的第二个参数一致:
(一)我们先局部声明一个组件

<script>
        //2、局部声明一个组件;这个需要在想要使用的Vue中的components中去声明;
        const buttonCounter={
            template:` <button v-on:click="count++">我被点击了{{count}}次~~~</button>`,
            data(){ //这里需要是以函数的形式对于每个使用的地方都抽取成了一个新的对象,不能以之前的{} 来返回,这样的返回的话,如果对于一个页面,则会都使用了一个data了。会互相影响
                return {
                    count:1
                }
            }
        }
  </script>

(二)然后再在下面的Vue实例中组件属性中去注册他

<script>
  new Vue({
                el:"#app",
                data:{
                    count:1
                },
                components:{
                   'button-counter' :buttonCounter   //注册上面局部组件后才能使用
                }
            })
</script>

(三)在Html的div中使用

在这里插入图片描述
使用效果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle-19g数据库的安装

简介 Oracle是一家全球领先的数据库和云解决方案提供商。他们提供了一套完整的技术和产品&#xff0c;包括数据库管理系统、企业级应用程序、人工智能和机器学习工具等。Oracle的数据库管理系统是业界最受欢迎和广泛使用的数据库之一&#xff0c;它可以管理和存储大量结构化和…

内核定时器API实现点灯

1.内核定时器 定时器是一个很常用的功能&#xff0c;需要周期性处理的工作都要用到定时器。 Linux 内核定时器 采用系统时钟来实现&#xff0c;并不是6ull里面的硬件定时器。 Linux 内核定时器使用很简单&#xff0c;只需要提供超时时间(相当于定时值)和定时处理函数即…

高阶数据结构与算法——红黑树の奥秘

1.认识红黑树 1.1红黑树的概念 红⿊树是⼀棵⼆叉搜索树&#xff0c;他的每个结点增加⼀个存储位来表⽰结点的颜⾊&#xff0c;可以是红⾊或者⿊⾊。通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束&#xff0c;红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍&#xff0c…

graphrag学习总结

学习视频&#xff1a;b站链接 项目链接 GraphRAG 的基本概念 Document&#xff08;文档&#xff09;&#xff1a;系统中的输入文档。这些文档要么代表CSV中的单独行&#xff0c;要么代表单独的txt文件。 TextUnit&#xff08;文本块&#xff09;&#xff1a;要分析的文本块。…

pdf阅读软件有哪些?5个软件帮助你快速进行pdf阅读

pdf阅读软件有哪些&#xff1f;5个软件帮助你快速进行pdf阅读 如果你正在寻找优秀的PDF阅读软件&#xff0c;以下推荐的5款软件能够帮助你快速、轻松地阅读和管理PDF文件。这些工具各具特色&#xff0c;适用于不同的使用需求&#xff0c;无论是注释、签名、还是管理大文件&…

使用Rollup.js快速开始构建一个前端项目

Rollup 是一个用于 JavaScript 项目的模块打包器&#xff0c;它将小块代码编译成更大、更复杂的代码&#xff0c;例如库或应用程序。Rollup 对代码模块使用 ES6 模块标准&#xff0c;它支持 Tree-shaking&#xff08;摇树优化&#xff09;&#xff0c;可以剔除那些实际上没有被…

lwip多线程使用说明,注意事项

lwIP: Common pitfalls 相关问题&#xff1a; lwIP - A Lightweight TCP/IP stack - Bugs: bug #56531, Missing locking in tcp_input() [Savannah] 我也碰到了差不多情况

goDoH:一款使用了DNS-over-HTTPS作为传输端口的C2框架

工具介绍 goDoH是一款概念验证命令与控制框架&#xff0c;该工具采用Golang开发&#xff0c;并使用了DNS-over-HTTP作为传输介质。 项目依赖 goDoH的代码构建需要使用到Dep&#xff08;【GitHub传送门】&#xff09;&#xff0c;Dep是一款针对Go语言的依赖管理工具。 在mac…

【vue】vue-router_ vue3路由管理器

代码获取 vue-router_ vue3路由管理器 ⼀、基本介绍 1. 单⻚应⽤程序介绍 1.1 概念 单⻚应⽤程序&#xff1a;SPA(Single Page Application)是指所有的功能都在⼀个HTML⻚⾯上实现 1.2 具体⽰例 单⻚应⽤⽹站&#xff1a; ⽹易云⾳乐 https://music.163.com/ 多⻚应⽤⽹…

【Python语言进阶(二)】

一、函数的使用方式 将函数视为“一等公民” 函数可以赋值给变量函数可以作为函数的参数函数可以作为函数的返回值 高阶函数的用法&#xff08;filter、map以及它们的替代品&#xff09; items1 list(map(lambda x: x ** 2, filter(lambda x: x % 2, range(1, 10)))) # filter…

K8s简介和安装部署

一、 Kubernetes 简介及部署方法 1、应用部署方式演变 Kubernetes简称为K8s&#xff0c;是用于自动部署、扩缩和管理容器化应用程序的开源系统&#xff0c;起源于Google 集群管理工具Borg。 传统部署 &#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优…

python yolov8半自动标注

首先标注一部分图片&#xff0c;进行训练&#xff0c;生成模型&#xff0c;标注文件为xml方便后面统一做处理。 1、标注数据&#xff08;文件为xml, 转为txt用于训练&#xff0c;保留xml标签文件&#xff09; 2、模型训练&#xff08;训练配置、训练代码、&#xff09; 3、使用…

400行程序写一个实时操作系统(八):(必看!)使用gdb调试错误的程序

上一篇笔者讲完了内存管理算法的完整实现&#xff0c;不过差点忘了&#xff0c;直接上这一部分是不是有点不友好&#xff0c;要知道笔者当初写内存算法可是调试得死去活来&#xff0c;奇奇怪怪的问题不断出现。 就比如笔者当初写了一个内存池算法&#xff0c;结果奇葩的事情发…

大模型之三十二-语音合成TTS(coqui) 之二 fine-tune

在 大模型之三十-语音合成TTS(coqui)[shichaog CSDN]中提到了xttsv2的fine-tune。 数据情况&#xff1a; 我是从bilibili up主小Lin说提取了一些视频&#xff0c;然后进行了重新的fine-tune。 训练结果 如下图所示&#xff0c;上面波形幅度较大的是xttsv2原始模型的结果&am…

u盘被写保护怎么解除?u盘写保护怎么去掉?

我们平时在使用U盘的过程中&#xff0c;可能会遇到U盘无法写入文件、删除数据或是格式化的情况。同时还可能收到提示“改磁盘已写保护”。U盘被写保护可能是有意的设置&#xff0c;也可能是无疑的操作。那么U盘被写保护了该怎么解除呢&#xff1f;本期内容&#xff0c;我们将介…

最新版 Winows下如何安装Redis?

最新版 Winows下如何安装Redis&#xff1f; 一、Redis介绍 Redis是一个广泛使用的开源非关系型数据库&#xff0c;它在现代软件开发中扮演着重要角色。**作为一个基于内存的数据库&#xff0c;Redis的底层代码是用ANSI C编写的&#xff0c;这使得它在性能上非常出色。**Redis…

【AIF-C01认证】亚马逊云科技生成式 AI 认证正式上线啦

文章目录 一、AIF-C01简介二、考试概览三、考试知识点3.1 AI 和 ML 基础知识3.2 生成式人工智能基础3.3 基础模型的应用3.4 负责任 AI 准则3.5 AI 解决方案的安全性、合规性和监管 四、备考课程4.1 「备考训练营」 在线直播课4.2 「SkillBuilder」学习课程 五、常见问题六、参考…

前端开发攻略---使用ocr识别图片进行文字提取功能

1、引入资源 通过链接引用 <script src"https://cdn.bootcdn.net/ajax/libs/tesseract.js/5.1.0/tesseract.min.js"></script> npm或其他方式下载 npm i tesseract 2、示例 <!DOCTYPE html> <html lang"en"><head><meta…

从纸质到云端:3C产品说明书的电子化进程与影响

在科技日新月异的今天&#xff0c;3C产品&#xff08;计算机类、通信类和消费类电子产品&#xff09;作为现代生活不可或缺的一部分&#xff0c;其说明书的演变也见证了技术进步的足迹。从最初的纸质文档到如今的电子说明书&#xff0c;这一转变不仅仅是物理形态的转换&#xf…

UE5 圆周运动、贝塞尔曲线运动、贝塞尔曲线点

圆周运动 贝塞尔曲线路径运动 蓝图函数库创建贝塞尔曲线点 // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "MyBlu…