Vue组件的概念及其创建和使用

news2024/11/24 23:00:53

一、Vue组件概念,创建和使用

🚀(一)以前遇到重复的结构代码,怎么做?复制粘贴?可维护性高吗?

🚀(1)为什么要使用组件?

  • 组件的好处:各自独立,便于服用。
<template>
  <div>
    <h1>组件导入</h1>
    
    <div class="box">
      <h3>标题 <button @click="show=!show">{{ show?'折叠':'展开' }}</button></h3>
      <ul v-show="show">
        <li>xxxx</li>
        <li>xxxx</li>
        <li>xxxx</li>
        <li>xxxx</li>
      </ul>
    </div>
  </div>
</template>

<script>
export default {
  data(){
    return{
      show:true,
    }
  }
}
</script>

<style>
  .box {
    border: 1px solid #000;
  }
</style>
  • ⛵⛵⛵如果我要添加很多个上面的功能呢? 要怎么解决?才可以更加的方便??
  1. 遇到重复标签结构想复用?封装成组件
  2. 封装组件的好处?各自独立, 便于复用,可维护性高

🚀(2)什么是组件化来发?

  • 组件是可复用的Vue实例,封装标签,样式和JS代码
  • 🚧组件化:封装的思想,把页面上“可重复使用”封装为“组件”,从而方便项目的开发。
  • 一个页面,可以拆分成一个个组件,一个组件就是一个整体。
  • 每个组件可以有自己独立的结构样式和行为(html、css和js)

🚀(3)如何创建和使用组件?

  • 🚧App.vue是根组件,这个比较特殊,是最大的一个根组件。其实里面还可以注册使用其他小组件。

🚀(4)使用组件的四步

🚀1. 创建组件,封装要复用的标签、样式、JS代码

  • 🚧把独立的组件封装一个.vue文件中,推荐放到components文件夹
  • 在components文件夹里面创建组件文件01-cpt.vue
<template>
  <div>
    <!-- <p>封装特别函数:组件(三块结构)</p> -->
    <div class="box">
      <h3>
        标题 <button @click="show = !show">{{ show ? "折叠" : "展开" }}</button>
      </h3>
      <ul v-show="show">
        <li>xxxx</li>
        <li>xxxx</li>
        <li>xxxx</li>
        <li>xxxx</li>
      </ul>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      show: true,
    };
  },
};
</script>

<style>
.box {
  border: 1px solid #000;
}
</style>

🚀2. 引入组件

<script>
import cpt1 from "./components/01-cpt.vue"
export default {
  // 注册小组件
  components:{
    // 自己定义组件名:导入变量名
    //cpt1:cpt1,
    cpt1,
  }
}
</script>

🚀3. 注册组件

  • 🚧①、全局注册:main.js中
import cpt2 from"./components/02-cpt";//导入
//import 组件对象 from 'vue文件路径'
//全局注册
Vue.component("cpt2",cpt2);
//Vue.component("组件名",组件对象)
  • 🚧②、局部注册:某.vue文件内
<script>
import cpt1 from "./components/01-cpt.vue"
export default {
  // 注册小组件
  components:{
    // 自己定义组件名:导入变量名(组件对象)
    //cpt1:cpt1,
    cpt1,
  }
}
</script>

在这里插入图片描述

🚀4. 使用组件:组件名当成标签使用即可<组件名></组件名>。注意点:组件名不能和内置的html名相同。

<template>
  <div>
    <h1>组件导入</h1>
    
    <cpt1></cpt1>
    <cpt1></cpt1>
  </div>
</template>

在这里插入图片描述

🚀(4) 组件的名字,有没有什么规范和要求呢?

🚀①、组件名的大小写

  • 在进行组件的注册时,定义组件名的方式有两种:
  1. 🚧注册使用短横线命名法,例如 hm-header 和 hm-main
    使用时 <hm-button> </hm-button>
Vue.component('hm-button',HmButton)
  1. 🚧注册使用大驼峰命名法,例如 HmHeader 和 HmMain
    使用时 <HmButton> </HmButton><hm-button> </hm-button> 都可以
Vue.component('HmButton',HmButton)
  • 🚥推荐1: 定义组件名时, 用大驼峰命名法, 更加方便
  • 🚥推荐2: 使用组件时,遵循html5规范, 小写横杠隔开(可选)

🚀②、通过 name 注册组件 (了解)

  • 组件在 开发者工具中 显示的名字,可以通过name进行修改:
<template>
  <div style="color: blue;">测试组件:全局注册使用</div>
</template>
<script>
export default {
	name:'ButtonTest'<!-- 👈👈👈 -->
}
</script>
  • 在注册组件期间,除了可以直接提供组件的注册名称之外,还可以把组件的name属性作为注册后组件的名称。
import ButtonTest from "./components/ButtonTest/index.vue"
Vue.component(ButtonTest.name,ButtonTest)
//等价于 Vue.component('ButtonTest' , ButtonTest)

🚀(5)组件与组件之间的样式会相互影响吗?组件的样式冲突 scoped

🚀①、默认情况下,写在组件中的样式会 全局生效,因此很容易造成多个组件之间的样式冲突问题。

  1. 🚧全局样式: 默认组件中的样式会作用到全局
  2. 🚧局部样式: 可以给组件加上scoped 属性, 可以让样式只作用于当前组件
<template>
  <div style="color: green;">测试组件:内部自己定义name</div>
</template>

<script>
export default {
  name:"HmCpt",
  data(){
    return{
      
    }
  }
}
</script>

<style scoped>
  /* 样式污染原因: */
  /* webpack:开发环境,也会把样式和前面组件组件样式全部,写在一起 */
  /* div样式,会对其他组件内div有污染 */

  /* 解决样式污染 */
  /* 1. 起个特别的类名,命名不会重复! */
  /* 2. style scoped:局部的样式 */
  /* 对自己的组件设置了颜色 */
  div{
    background-color: yellow;
  }
</style>

在这里插入图片描述

🚀②、scoped原理?

⚫ (1)🚥当前组件内标签都被添加data-v-hash值的属性
⚫ (2)🚥css选择器都被添加[data-v-hash值]的属性选择器

  • 🚨最终效果: 必须是当前组件的元素, 才会有这个自定义属性, 才会被这个样式作用到。
    在这里插入图片描述

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

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

相关文章

编程小白的自学笔记十一(python爬虫入门三Selenium的使用+实例详解)

系列文章目录 编程小白的自学笔记十&#xff08;python爬虫入门二实例代码详解 编程小白的自学笔记九&#xff08;python爬虫入门代码详解&#xff09; 编程小白的自学笔记八&#xff08;python中的多线程&#xff09; 编程小白的自学笔记七&#xff08;python中类的继承…

phpstudy伪静态

html静态网址在文件目录真实存在就是真的html,把动态经过转换伪造成把html就是伪静态&#xff0c;可以用order by 和 union select验证一下 apache的伪静态网址搭建 找到apache的LoadModule rewrite_module modules/mod_rewrite.so把前面的#删除掉&#xff0c;开启伪静态 All…

Unity 实用插件篇 | Tutorial Master 2 游戏引导教程 功能深入学习

前言【Unity 实用插件篇】 | Tutorial Master 2 游戏引导教程 功能深入学习一、Tutorial Master Manager 面板二、Tutorial Master Manager 面板详细介绍2.1 Debug mode 调试模式2.2 Localization 本地化2.3 Pooling Settings 对象池设置2.4 Start Up Setting2.5 Tutorial List…

Python案例实现|租房网站数据表的处理与分析

在综合实战项目中&#xff0c;“北京链家网”租房数据的抓取任务已在 上一篇 完成&#xff0c;得到了数据表bj_lianJia.csv&#xff0c;如图1所示。该数据表包含ID、城区名&#xff08;district&#xff09;、街道名&#xff08;street&#xff09;、小区名&#xff08;communi…

【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择

&#x1f38a;专栏【MySQL】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【The Right Path】 &#x1f970;欢迎并且感谢大家指出小吉的问题 文章目录 &#x1f354;索引的使用⭐验证索引效率&#x1f388;细节 ⭐最左前缀法则…

Linux系统之安装MySQL8.0版本

Linux系统之安装MySQL8.0版本 一、MySQL介绍1.1 MySQL简介1.2 MySQL特点 二、本次实践介绍2.1 环境规划2.2 本次实践目的 三、卸载mariadb数据库3.1 卸载mariadb数据库3.2 卸载mysql数据库 四、配置yum仓库4.1 下载rpm文件4.2 配置yum仓库4.3 检查yum仓库状态4.4 检查mysql版本…

香橙派Zero2基于wiringPi外设库的实验(超声波测距)

超声波测距原理&#xff0c;原理可以查看下面的文章&#xff0c;这里就不赘述了 [51单片机超声波测距](http://t.csdn.cn/eYbod)在Linux中使用超声波测距会用到的时间相关的API和结构体 包含的头文件以及函数原型和时间结构体timveal原型#include<sys/time.h>int getti…

windows部署安装redis安装教程

1、下载redishttps://github.com/tporadowski/redis/releases 2、下载完然后双击安装 比较简单 略过 3、测试是否安装成功 提示bug Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf …

ffplay播放器剖析(8)----逐帧/音量调节/快进快退/倍数分析

文章目录 1.逐帧播放2. 音量调节3. seek 快进 快退4.倍速 1.逐帧播放 逐帧播放就是按s键触发的,调用step_to_next_frame触发 static void step_to_next_frame(VideoState *is) {/* if the stream is paused unpause it, then step */if (is->paused)stream_toggle_pause(i…

jmeter随记2:压测

jmeter随记1:压测 简述一、压测步骤二、观察cpu和内存占用情况三、查看磁盘占用情况 简述 关于压测&#xff0c;jmeter更直观的作用是用来编写压测脚本【请求和压测策略】&#xff0c;然后在linux服务器上执行&#xff0c;也可以在本地执行&#xff0c;压测执行脚本在启动jmet…

PHP注册/登录/发邮件--【强撸项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 上效果图phpStudy 设置导数据库程序基本流程项目目录如图&#xff1a;注册zhuce.html配套资源作业&#xff1a; 本系列校训 用免费公开视频&#xff0c;卷飞培训班哈人&…

Oracle物化视图刷新和物化视图日志

Oracle物化视图刷新和物化视图日志 Oracle的物化视图是包括一个查询结果的数据库对像&#xff0c;它是远程数据的的本地副本&#xff0c;或者用来生成基于数据表求和的汇总表。 测试物化视图的刷新&#xff0c;参考物化视图日志&#xff0c;一个源表对应多个物化视图刷新。 物…

【Linux工具篇】项目自动构建化工具-make/Makefile

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【Linux专栏】&#x1f388; 本专栏旨在分享学习Linux的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 &#x1f4ab…

matlab cross()函数叉乘 计算过程详解

向量叉乘 在数学上&#xff0c;两向量的叉乘是一个过两相交向量的交点且垂直于两向量所在平面的向量。在Matlab中&#xff0c;用函数cross实现。 函数 cross() 格式 C cross(A,B) %若A、B为向量&#xff0c;则返回A与B的叉乘&#xff0c;即CAB&#xff0c;A、B必须是3个…

c#封装bool到cpp

c#那边传一个结构体&#xff0c;结构体里包含两个bool&#xff0c;封送到cpp&#xff0c;结果发现cpp那边读取有问题。一看cpp接收变量的内存&#xff0c;两个bool占的内存都不是一个字节了&#xff0c;再次记录原因。 封送的时候&#xff0c;默认是占4个字节&#xff0c;如果…

Pycharm----导入库文件夹不在py文件的目录下

问题描述&#xff1a; 想在不同目录下导入根目录的包&#xff0c;直接写会报错。如下边object_detect.py在function文件夹下&#xff0c;导入包默认在这个文件下&#xff0c;但我想导入根目录models和utils下的包 解决方法&#xff1a; 将根目录设置为源代码根目录&#xff0…

linux静态库,动态库总结

1.介绍 使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据&#xff0c;这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化&#xff0c;更容易重新编译&#xff…

【Spring Cloud】Hystrix熔断机制

文章目录 前言什么是hystrix的熔断&#xff1f;使用hystrix熔断功能的配置Hystrix 工作原理Hystrix工作流 前言 什么是hystrix的熔断&#xff1f; hystrix熔断主要是指在一定的时间窗口内&#xff0c;当请求的次数达到一定的失败比率后&#xff0c;hystrix就会主动拒绝服务&a…

【图像分割】基于浣熊优化算法COA的Otsu(大津法)多阈值电表数字图像分割 电表数字识别【Matlab代码#52】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】1. 原始COA算法1.1 开发阶段1.2 探索阶段 2. 多阈值Otsu原理3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】 1. 原始…

长尾式差分放大电路

3.3.2差分放大电路 电路 条件 静态分析 对共模信号的抑制作用 当产生温度变化时&#xff0c;也类似加入了共模信号&#xff0c;由于负反馈电阻 的存在&#xff0c;会产生如下变化。 对差模信号的放大作用 电路 交流等效电路 具体分析 具有恒流源的差分放大电路 电路 详细分析…