当前位置: 首页 > news >正文

vue2.0 组件

个人简介

👨‍💻‍个人主页: 魔术师
📖学习方向: 主攻前端方向,正逐渐往全栈发展
🚴个人状态: 研发工程师,现效力于政务服务网事业
🇨🇳人生格言: “心有多大,舞台就有多大。”
📚推荐学习: 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js 🍇鸿蒙开发
🪧使用备注:仅供学习交流 严禁用于商业用途 ,若发现侵权内容请及时联系作者
📤更新进度:持续更新内容
🤙个人名片:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

vue2.0 组件目录


文章目录

    • 个人简介
    • vue2.0 组件目录
    • 9. vue 组件
      • 9.1 什么是组件化开发
      • 9.2 vue 中的组件化开发
      • 9.3 vue 组件的三个组成部分
        • 1. template
        • 2. script
        • 3. style
      • 9.4 组件之间的父子关系
        • 1. 使用组件的三个步骤
        • 2. 通过 components 注册的是私有子组件
        • 3. 注册全局组件
      • 9.5 组件的 props
        • 1. props 是只读的
        • 2. props 的 default 默认值
        • 3. props 的 type 值类型
        • 4. props 的 required 必填项
        • 5. 组件之间的样式冲突问题
      • 9.6 组件的基本使用
        • 1. 思考:如何解决组件样式冲突的问题
        • 2. style 节点的 scoped 属性
        • 3. /deep/ 样式穿透
      • 9.7 动态组件
        • 1. 什么是动态组件
        • 2. 如何实现动态组件渲染
        • 3. 使用 keep-alive 保持状态
        • 4. keep-alive 对应的生命周期函数
        • 5. keep-alive 的 include 属性


9. vue 组件

9.1 什么是组件化开发

  • 组件化开发指的是:根据封装的思想,把页面上可重用的 UI 结构封装为组件,从而方便项目的开发和维护。

9.2 vue 中的组件化开发

  • vue 是一个支持组件化开发的前端框架。
  • vue 中规定:组件的后缀名是 .vue。之前接触到的 App.vue 文件本质上就是一个 vue 的组件。

9.3 vue 组件的三个组成部分

  • 每个 .vue 组件都由 3 部分构成,分别是:
    • template -> 组件的模板结构
    • script -> 组件的 JavaScript 行为
    • style -> 组件的样式
  • 其中,每个组件中必须包含 template 模板结构,而 script 行为和 style 样式是可选的组成部分。
1. template
  • vue 规定:每个组件对应的模板结构,需要定义到 <template> 节点中。
  • 注意:
    • template 是 vue 提供的容器标签,只起到包裹性质的作用,它不会被渲染为真正的 DOM 元素
    • template 中只能包含唯一的根节点
2. script
  • vue 规定:开发者可以在 <script>节点中封装组件的 JavaScript 业务逻辑。
  • .vue 组件中的 data 必须是函数
  • vue 规定:.vue 组件中的 data 必须是一个函数,不能直接指向一个数据对象。
3. style
  • vue 规定:组件内的 <style> 节点是可选的,开发者可以在<style>节点中编写样式美化当前组件的 UI 结构
  • <style> 标签上添加 lang="less" 属性,即可使用 less 语法编写组件的样式

vue.png

9.4 组件之间的父子关系

image.png

1. 使用组件的三个步骤

image.png

  • 步骤1:使用 import 语法导入需要的组件
  • 步骤2:使用 components 节点注册组件
  • 步骤3:以标签形式使用刚才注册的组件
2. 通过 components 注册的是私有子组件
  • 例如:

    • 在组件 A 的 components 节点下,注册了组件 F。
    • 则组件 F 只能用在组件 A 中;不能被用在组件 C 中。
  • 请大家思考两个问题:

    1. 为什么 F 不能用在组件 C 中?
    2. 怎样才能在组件 C 中使用 F?
3. 注册全局组件

在 vue 项目的 main.js 入口文件中,通过 Vue.component() 方法,可以注册全局组件。示例代码如下:

image.png

9.5 组件的 props

  • props 是组件的自定义属性,在封装通用组件的时候,合理地使用 props 可以极大的提高组件的复用性

  • 它的语法格式如下:

image.png

1. props 是只读的
  • vue 规定:组件中封装的自定义属性是只读的,程序员不能直接修改 props 的值。否则会直接报错:

image.png

  • 要想修改 props 的值,可以把 props 的值转存到 data 中,因为 data 中的数据都是可读可写的!

image.png

2. props 的 default 默认值
  • 在声明自定义属性时,可以通过 default 来定义属性的默认值。示例代码如下:

image.png

3. props 的 type 值类型
  • 在声明自定义属性时,可以通过 type 来定义属性的值类型。示例代码如下:

image.png

4. props 的 required 必填项
  • 在声明自定义属性时,可以通过 required 选项,将属性设置为必填项,强制用户必须传递属性的值。示例代码如下:

image.png

5. 组件之间的样式冲突问题
  • 默认情况下,写在 .vue 组件中的样式会全局生效,因此很容易造成多个组件之间的样式冲突问题。
  • 导致组件之间样式冲突的根本原因是:
    • 单页面应用程序中,所有组件的 DOM 结构,都是基于唯一的 index.html 页面进行呈现的
    • 每个组件中的样式,都会影响整个 index.html 页面中的 DOM 元素

9.6 组件的基本使用

1. 思考:如何解决组件样式冲突的问题
  • 为每个组件分配唯一的自定义属性,在编写组件样式时,通过属性选择器来控制样式的作用域,示例代码如下:

image.png

2. style 节点的 scoped 属性
  • 为了提高开发效率和开发体验,vue 为 style 节点提供了 scoped 属性,从而防止组件之间的样式冲突问题:

image.png

3. /deep/ 样式穿透
  • 如果给当前组件的 style 节点添加了 scoped 属性,则当前组件的样式对其子组件是不生效的。如果想让某些样式对子组件生效,可以使用 /deep/ 深度选择器。

image.png

9.7 动态组件

1. 什么是动态组件
  • 动态组件指的是动态切换组件的显示与隐藏
2. 如何实现动态组件渲染
  • vue 提供了一个内置的 <component> 组件,专门用来实现动态组件的渲染。示例代码如下:

image.png

  • component 标签是专门用来占位的
  • 给 is 属性所表示的组件,来进行展位
<component is="组件的注册名称"></component>
3. 使用 keep-alive 保持状态
  • 默认情况下,切换动态组件时无法保持组件的状态。此时可以使用 vue 内置的 <keep-alive> 组件保持动态组件的状态。示例代码如下:
 <keep-alive include="Right,Left"><component :is="comName"></component></keep-alive>
  • keep-alive 可以保证内部的组件不会被销毁
  • 注意:默认情况下,keep-alive 会缓存内部所有的组件
  • include=“Right” 表示:只缓存名字叫 Right 的组件,其它组件不会被缓存
  • 注意:在 include 中,逗号前后千万不要加空格,否则会有问题
4. keep-alive 对应的生命周期函数
  • 当组件被缓存时,会自动触发组件的 deactivated 生命周期函数。
  • 当组件被激活时,会自动触发组件的 activated 生命周期函数。
 destroyed() {console.log('destroyed')},// 组件被激活的时候,会自动触发 activated 生命周期函数// 组件在被激活的时候,以及组件第一次被创建的时候,都会触发 activated 生命周期函数activated() {console.log('---- activated ----', '组件被激活了')},// 组件被缓存的时候,会自动触发 deactivated 生命周期函数// 只有组件被缓存的时候,才会触发 deactivated 生命周期函数deactivated() {console.log('---- deactivated ----', '组件被缓存了')}
5. keep-alive 的 include 属性
  • include 属性用来指定:只有名称匹配的组件会被缓存。多个组件名之间使用英文的逗号分隔
      <!-- keep-alive 可以保证内部的组件不会被销毁 --><!-- 注意:默认情况下,keep-alive 会缓存内部所有的组件 --><!-- include="Right" 表示:只缓存名字叫 Right 的组件,其它组件不会被缓存 --><!-- 注意:在 include 中,逗号前后千万不要加空格,否则会有问题 --><keep-alive include="Right,Left"><component :is="comName"></component></keep-alive>

相关文章:

  • Java大厂面试三轮问答:微服务与数据库技术深度解析
  • matlab绘制光学传递函数mtf曲线
  • 精益数据分析(69/126):最小可行化产品(MVP)的设计、验证与数据驱动迭代
  • 第35周Zookkeeper+Dubbo 面试题精讲
  • 经典密码学和现代密码学的结构及其主要区别(1)凯撒密码——附py代码
  • k8s集成环境中pod运行的容器退出码141故障解决方案及排查方向,其他退出码也可以参考此篇
  • javaScript学习第三章(流程控制小练习)
  • Spring的后置处理器是干什么用的?扩展点又是什么?
  • Docker 核心原理详解:Namespaces 与 Cgroups 如何实现资源隔离与限制
  • React集成百度【JSAPI Three】教程(001):快速入门
  • Python----目标检测(labelimg和labelme的安装与使用,Pycharm配置教程)
  • 养生指南:解锁健康生活新方式
  • BGP综合实验
  • Nginx基础知识
  • java基础-关键字:static、单例模式
  • QPS与TPS区分及压测指标解读
  • 渗透测试核心技术:漏洞挖掘与利用
  • ai agent(智能体)开发 python高级应用8:crawl4ai 对用 LLMExtractionStrategy 和 python的 re 如何选择
  • 存储地图上的各种形状的文件格式.SHP文件介绍
  • python学习day2(未写完,明天继续补充)
  • 牛市早报|年内首次存款利率下调启动,5月LPR今公布
  • 王毅同德国外长瓦德富尔通电话
  • 巴基斯坦副总理兼外长达尔将访华
  • 聘期三年已至:37岁香港青年叶家麟卸任三亚市旅游发展局局长
  • 美国恶劣天气已造成至少28人死亡
  • 2024年全国博物馆接待观众14.9亿人次