关于vue.js组件开发

news2025/1/10 20:10:34

文章目录

  • 前言
  • 一、组件基础?
    • 组件的概念:
    • 组件的注册
      • 全局注册:
      • 局部注册:
  • 二、组件的选项
    • 1.模板(template)
    • 2.数据(data):
    • 3.方法(methods)
    • 4.生命周期钩子函数
  • 三.组件间通信
    • 父子组件通信
      • 父组件向子组件传递数据:
      • 子组件向父组件传递数据:
    • 非父子组件通信:
  • 插槽(Slots)
    • 默认插槽:
    • 具名插槽:
    • 动态组件:
    • 组件的样式
      • 内联样式:
      • CSS 类:
      • 作用域样式:
  • 优化与注意事项
    • 性能优化:
    • 注意事项:


前言

Vue.js 是一款流行的 JavaScript 框架,用于构建用户界面。以下是关于 Vue.js 组件开发的详细介绍:

一、组件基础?

组件的概念:

组件是 Vue.js 应用程序的基本构建块,它是一种可复用的 Vue 实例,具有自己的模板、数据、方法和生命周期。可以将组件看作是一个独立的、自给自足的代码单元,用于实现特定的功能或界面部分。

组件的注册

全局注册:

使用Vue.component方法进行全局注册,这样注册的组件可以在整个 Vue 应用程序的任何地方使用。

Vue.component('my-component', {
  // 组件的选项
  template: '<div>这是一个全局注册的组件</div>'
});

局部注册:

在单个 Vue 实例或组件内部使用components选项进行局部注册,这样注册的组件只能在当前实例或组件的模板中使用。

new Vue({
  el: '#app',
  components: {
    'my-component': {
      // 组件的选项
      template: '<div>这是一个局部注册的组件</div>'
    }
  }
});

二、组件的选项

1.模板(template)

定义了组件的 HTML 结构,可以使用 Vue.js 的模板语法来绑定数据和添加交互逻辑。

template: '<div><h1>{{ title }}</h1><p>{{ message }}</p></div>'

2.数据(data):

组件的数据是响应式的,当数据发生变化时,组件会自动更新。数据必须是一个函数,返回一个对象,以确保每个组件实例都有自己独立的数据副本。

代码如下(示例):

data() {
  return {
    title: '组件标题',
    message: '组件内容'
  };
}

3.方法(methods)

定义了组件可以调用的函数,用于处理用户交互或执行其他逻辑。

methods: {
  handleClick() {
    alert('按钮被点击了');
  }
}

4.生命周期钩子函数

Vue.js 组件有多个生命周期钩子函数,如created、mounted、updated、destroyed等,可以在这些钩子函数中执行特定的操作,例如在created钩子函数中进行数据初始化,在mounted钩子函数中发送 AJAX 请求获取数据等。

三.组件间通信

父子组件通信

父组件向子组件传递数据:

通过子组件的props选项来实现。父组件可以在子组件标签上通过属性绑定的方式传递数据,子组件通过props选项接收这些数据。

<!-- 父组件模板 -->
<template>
  <div>
    <child-component :parent-data="parentData"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      parentData: '这是父组件传递给子组件的数据'
    };
  }
};
</script>

<!-- 子组件 -->
<template>
  <div>
    <p>接收来自父组件的数据:{{ parentData }}</p>
  </div>
</template>

<script>
export default {
  props: ['parentData']
};
</script>

子组件向父组件传递数据:

通过自定义事件来实现。子组件可以使用$emit方法触发一个自定义事件,并传递数据,父组件在子组件标签上通过v-on指令监听这个自定义事件,并在事件处理函数中接收子组件传递的数据。

<!-- 子组件模板 -->
<template>
  <div>
    <button @click="sendDataToParent">点击传递数据给父组件</button>
  </div>
</template>

<script>
export default {
  methods: {
    sendDataToParent() {
      const dataToSend = '这是子组件传递给父组件的数据';
      this.$emit('child-event', dataToSend);
    }
  }
};
</script>

<!-- 父组件 -->
<template>
  <div>
    <child-component @child-event="handleChildEvent"></child-component>
    <p>接收来自子组件的数据:{{ receivedData }}</p>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      receivedData: ''
    };
  },
  methods: {
    handleChildEvent(data) {
      this.receivedData = data;
    }
  }
};
</script>

非父子组件通信:

可以使用 Vuex 状态管理模式来实现,也可以通过创建一个事件总线(Event Bus)来实现。

插槽(Slots)

默认插槽:

用于在组件中插入内容。在组件模板中使用标签定义插槽位置,父组件在使用子组件时,可以在子组件标签之间插入内容,这些内容将显示在子组件的插槽位置。

<!-- 子组件模板 -->
<template>
  <div>
    <h1>组件标题</h1>
    <slot>这是默认插槽的内容,如果父组件没有插入内容,将显示这里的文本。</slot>
  </div>
</template>

<!-- 父组件模板 -->
<template>
  <div>
    <my-component>
      <p>这是父组件插入到子组件默认插槽中的内容。</p>
    </my-component>
  </div>
</template>

具名插槽:

当一个组件需要多个插槽时,可以使用具名插槽。在标签上使用name属性指定插槽的名称,父组件在插入内容时,使用v-slot指令指定要插入的插槽名称。

<!-- 子组件模板 -->
<template>
  <div>
    <slot name="header">这是默认的头部插槽内容。</slot>
    <p>组件的主体内容。</p>
    <slot name="footer">这是默认的底部插槽内容。</slot>
  </div>
</template>

<!-- 父组件模板 -->
<template>
  <div>
    <my-component>
      <template v-slot:header>
        <h2>这是父组件插入到子组件头部插槽中的内容。</h2>
      </template>
      <template v-slot:footer>
        <p>这是父组件插入到子组件底部插槽中的内容。</p>
      </template>
    </my-component>
  </div>
</template>

动态组件:

可以使用标签的is属性来动态渲染不同的组件,根据数据的变化来切换显示的组件。

<template>
  <div>
    <button @click="changeComponent">切换组件</button>
    <component :is="currentComponent"></component>
  </div>
</template>

<script>
import ComponentA from './ComponentA.vue';
import ComponentB from './ComponentB.vue';

export default {
  components: {
    ComponentA,
    ComponentB
  },
  data() {
    return {
      currentComponent: 'ComponentA'
    };
  },
  methods: {
    changeComponent() {
      this.currentComponent = this.currentComponent === 'ComponentA'? 'ComponentB' : 'ComponentA';
    }
  }
};
</script>

组件的样式

内联样式:

可以在组件的模板中使用style属性来定义内联样式。

<template>
  <div style="background-color: lightblue; padding: 10px;">
    <p>这是一个具有内联样式的组件。</p>
  </div>
</template>

CSS 类:

可以在组件的模板中使用class属性来应用 CSS 类,然后在 CSS 文件中定义这些类的样式。

<template>
  <div class="my-component">
    <p>这是一个应用了CSS类的组件。</p>
  </div>
</template>

<style>
.my-component {
  background-color: lightgreen;
  padding: 10px;
}
</style>

作用域样式:

在单文件组件中,可以使用scoped属性来限定样式的作用域,使得组件的样式只应用于当前组件,不会影响到其他组件。

<template>
  <div class="my-component">
    <p>这是一个具有作用域样式的组件。</p>
  </div>
</template>

<style scoped>
.my-component {
  background-color: lightyellow;
  padding: 10px;
}
</style>

优化与注意事项

性能优化:

合理使用v-ifv-show,避免不必要的组件渲染;使用key属性来优化列表渲染,提高渲染效率;对于大型应用,可以使用代码分割和懒加载来优化加载性能。

注意事项:

在组件开发中,要注意保持组件的独立性和可复用性,避免组件之间的过度耦合;合理处理组件的生命周期,避免内存泄漏和不必要的性能开销;在使用第三方组件时,要注意组件的兼容性和文档说明。

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

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

相关文章

开关不一定是开关灯用 - 命令模式(Command Pattern)

命令模式&#xff08;Command Pattern&#xff09; 命令模式&#xff08;Command Pattern&#xff09;命令设计模式命令设计模式结构图命令设计模式涉及的角色 talk is cheap&#xff0c; show you my code总结 命令模式&#xff08;Command Pattern&#xff09; 命令模式&…

Qt 5.14.2 学习记录 —— 칠 QWidget 常用控件(2)

文章目录 1、Window Frame2、windowTitle3、windowIcon4、qrc机制5、windowOpacity 1、Window Frame 在运行Qt程序后&#xff0c;除了用户做的界面&#xff0c;最上面还有一个框&#xff0c;这就是window frame框。对于界面的元素&#xff0c;它们的原点是Qt界面的左上角或win…

LabVIEW水轮发电机组振动摆度故障诊断

本文介绍了基于LabVIEW的水轮发电机组振动摆度故障诊断系统的设计与实施过程。系统在通过高效的故障诊断功能&#xff0c;实现水轮发电机组的振动、温度等关键指标的实时监控与智能分析&#xff0c;从而提高电力设备的可靠性和安全性。 ​ 项目背景 随着电力行业对设备稳定性…

【JavaEE】—— SpringBoot项目集成百度千帆AI大模型(对话Chat V2)

本篇文章在SpringBoot项目中集成百度千帆提供的大模型接口实现Chat问答效果&#xff1a; 一、百度智能云 百度千帆大模型平台是百度智能云推出的一个企业级一站式大模型与AI原生应用开发及服务平台。 注册地址&#xff1a;https://qianfan.cloud.baidu.com/ 注册成功后&…

ARM交叉编译Boost库

Boost下载&#xff1a;点击跳转 编译过程&#xff1a; 生成project-config.jam ./bootstrap.sh --with-librariesfilesystem,thread --with-toolsetgcc 2. 修改project-config.jam&#xff08;位于第12行附近&#xff09; if ! gcc in [ feature.values <toolset> ] …

Cpp::C++11右值引用与移动构造(30)

文章目录 前言一、左值 & 右值二、左值引用 & 右值引用三、右值引用的意义四、右值引用和移动语义五、与编译器优化做的对比六、右值引用引用左值七、一些小问题能否将函数返回值设为 右值引用&#xff1f;函数传值返回&#xff0c;但在返回时能否手动 move 返回值&…

LeetCode:108.将有序数组转换为二叉搜索树

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;108.将有序数组转换为二叉搜索树 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff…

基于Redisson实现重入锁

一. 分布式锁基础 在分布式系统中&#xff0c;当多个客户端&#xff08;应用实例&#xff09;需要访问同一资源时&#xff0c;可以使用分布式锁来确保同一时刻只有一个客户端能访问该资源。Redis作为高性能的内存数据库&#xff0c;提供了基于键值对的分布式锁实现&#xff0c…

React中createRoot函数原理解读——Element对象与Fiber对象、FiberRootNode与HostRootNode

【2024最新版】React18 核心源码分析教程&#xff08;全61集&#xff09; Element对象与Fiber对象 在 React 中&#xff0c;Element 对象 和 Fiber 对象 是核心概念&#xff0c;用于实现 React 的高效渲染和更新机制。以下是它们的详细解读&#xff1a; 1. Element 对象 定…

急速了解什么是GPU服务器

GPU服务器是一种专门配置了高性能图形处理器&#xff08;GPU&#xff09;的服务器&#xff0c;旨在提供高性能计算、深度学习、科学计算等多种场景的计算服务。与传统的CPU服务器相比&#xff0c;GPU服务器在处理并行密集型计算任务时具有显著优势。本文将详细介绍GPU服务器的定…

一.MySQL程序简介

整体介绍 1.服务端mysqld(可执行文件) mysqld --verbose --help 2.客户端mysql(可执行文件) 3.其它工具包程序

腾讯云AI代码助手编程挑战赛-凯撒密码解码编码器

作品简介 在CTFer选手比赛做crypto的题目时&#xff0c;一些题目需要自己去解密&#xff0c;但是解密的工具大部分在线上&#xff0c;而在比赛过程中大部分又是无网环境&#xff0c;所以根据要求做了这个工具 技术架构 python语言的tk库来完成的GUI页面设计&#xff0c;通过…

深度学习第三弹:python入门与线性表示代码

一、python入门 1.熟悉基础数据结构——整型数据&#xff0c;浮点型数据&#xff0c;列表&#xff0c;字典&#xff0c;字符串&#xff1b;了解列表及字典的切片&#xff0c;插入&#xff0c;删除操作。 list1 [1, 2, 3, 4, 5] for each in list1:print(each) print(list1[1…

常见的端口号大全,2025年整理

端口号是网络通信的基础&#xff0c;它定义了不同服务的入口和出口。了解服务端口号不仅有助于网络配置&#xff0c;还能提升问题排查效率。在实际应用中&#xff0c;熟悉常见端口号可以帮助你快速定位网络故障、优化服务性能&#xff0c;并确保网络安全。 一、常见的网络服务…

Android adb shell GPU信息

Android adb shell GPU信息 先 adb shell 进入控制台。 然后&#xff1a; dumpsys | grep GLES Android adb shell命令捕获systemtrace_android 抓trace-CSDN博客文章浏览阅读2.5k次&#xff0c;点赞2次&#xff0c;收藏8次。本文介绍了如何使用adbshell命令配合perfetto工…

【LeetCode】力扣刷题热题100道(21-25题)附源码 接雨水 合并区间 字母异位词 滑动窗口 覆盖子串(C++)

目录 1.接雨水 2.合井区间 3.找到字符串中所有字母异位词 4.滑动窗口最大值 5.最小覆盖子串 1.接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 代码如下所示&#xff1a; class Solution {…

01-51单片机LED与独立按键

一、单片机概述 注意&#xff1a;个人学习笔记&#xff0c;里面涉及到的C语言和进程转换相关的知识在C语言部分已经写了&#xff0c;这里是默认都会的状态学习单片机。 1.什么是单片机 单片机&#xff0c;英文Micro Controller Unit&#xff0c;简称MCU。其内部集成了CPU、R…

Linux内核编程(二十一)USB应用及驱动开发

一、基础知识 1. USB接口是什么&#xff1f; USB接口&#xff08;Universal Serial Bus&#xff09;是一种通用串行总线&#xff0c;广泛使用的接口标准&#xff0c;主要用于连接计算机与外围设备&#xff08;如键盘、鼠标、打印机、存储设备等&#xff09;之间的数据传输和电…

ModelScope创空间使用

文章目录 前言 一、ModelScope是什么&#xff1f; 二、使用步骤 1.注册ModelScope 2.新建创空间 3.创空间基本说明 4.部署创空间 5.访问创空间 三、其他补充说明 总结 前言 随着AI大模型的应用越来越广泛&#xff0c;模型应用部署的需求也越来越多&#xff0c;包括h…

记1(监督学习+一元线性回归

目录 1、基础概念2、一元线性回归 1、基础概念 机器学习&#xff08;Machine Learning&#xff09;&#xff1a;通过学习算法从数据中学习模型的过程 例如从“房价y~面积x”的关系中学习&#xff1a; 建立模型&#xff1a;ywxb 学习模型&#xff1a;确定w&#xff0c;b&#x…