关于vue.js组件开发

文章目录

  • 前言
  • 一、组件基础?
    • 组件的概念:
    • 组件的注册
      • 全局注册:
      • 局部注册:
  • 二、组件的选项
    • 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属性来优化列表渲染,提高渲染效率;对于大型应用,可以使用代码分割和懒加载来优化加载性能。

注意事项:

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

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

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

相关文章

通义灵码在跨领域应用拓展之物联网篇

目录 一.引言 二.通义灵码简介 三.通义灵码在物联网领域的设备端应用 1.传感器数据采集 (1).不同类型传感器的数据读取 (2).数据转换与预处理 2.设备控制指令接收和执行 (1).指令解析与处理 (2).设备动作执行 四.通义灵码在物联网领域的云端平台应用 1.数据存储和管…

Win32汇编学习笔记09.SEH和反调试

Win32汇编学习笔记09.SEH和反调试-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net SEH - structed exception handler 结构化异常处理 跟筛选一样都是用来处理异常的,但不同的是 筛选器是整个进程最终处理异常的函数,但无法做到比较精细的去处理异常(例如处理…

详细数据库MySQL查询语句

查询语句 &#xff08;SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] FROM <表名或视图名> [,<表名或视图名>]|(<SELECT 语句>) [AS] <别名> [WHERE <条件表达式>] [GROUP BY <列名1> [HAVING <条件表达式…

解决anaconda prompt找不到的情况

由于打开某个文件夹导致系统卡死了&#xff0c;鼠标使用不了&#xff0c;只能使用快捷键ctrlaltdelete打开&#xff0c;点任务管理器也没什么用&#xff0c;就点了注销选项。 注销&#xff1a;清空缓存空间和注册表信息&#xff0c;向系统发出清除现在登陆的用户的请求。 导致…

计算机网络 (31)运输层协议概念

一、概述 从通信和信息处理的角度看&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功能中的最低层。运输层的一个核心功能是提供从源端主机到目的端主机的可靠的、与实际使用的网络无关的信息传输。它向高层用…

【C++经典例题】求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a; 期待您的关注 题目描述&#xff1a; 原题链接&#xff1a; 求123...n_牛客题霸_牛客网 (nowcoder.com) 解题思路&#xff1a; …

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

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

【深度学习量化交易13】继续优化改造基于miniQMT的量化交易软件,增加补充数据功能,优化免费下载数据模块体验!

我是Mr.看海&#xff0c;我在尝试用信号处理的知识积累和思考方式做量化交易&#xff0c;应用深度学习和AI实现股票自动交易&#xff0c;目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统。 MiniQMT是一种轻量级的量化交易解决方案&#xff0…

Vue进阶(贰幺贰)npm run build多环境编译

文章目录 一、前言二、实施三、总结&#xff1a;需要打包区分不同环境四、拓展阅读 一、前言 项目开发阶段&#xff0c;会涉及打包部署到多个环境应用场景&#xff0c;在不同环境中&#xff0c;需要进行项目层面的区分&#xff0c;做不同的操作&#xff0c;可以利用打包的--mo…

回归预测 | MATLAB实GRU多输入单输出回归预测

回归预测 | MATLAB实GRU多输入单输出回归预测 目录 回归预测 | MATLAB实GRU多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 回归预测 | MATLAB实GRU多输入单输出回归预测。使用GRU作为RNN的一种变体来处理时间序列数据。GRU相比传统的RNN有较好的记…

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> ] …

【.NET】Kafka消息队列介绍,使用Confluent.Kafka集成Kafka消息队列

一、Kafka介绍 kafka是一种高吞吐量、分布式、可扩展的消息中间件系统&#xff0c;最初由LinkedIn公司开发。随着不断的发展&#xff0c;在最新的版本中它定义为分布式的流处理平台&#xff0c;现在在大数据应用中也是十分广泛。 它可以处理大量的实时数据流&#xff0c;被广…

Jenkins内修改allure报告名称

背景&#xff1a; 最近使用Jenkins搭建自动化测试环境时&#xff0c;使用Jenkins的allure插件生成的报告&#xff0c;一直显示默认ALLURE REPORT&#xff0c;想自定义成与项目关联的名称&#xff0c;如图所示&#xff0c;很明显自定义名称显得高大上些&#xff0c;之前…

Elasticsearch学习(1) : 简介、索引库操作、文档操作、RestAPI、RestClient操作

目录 1.elasticsearch简介1.1.了解es1.2.倒排索引正向索引和倒排索引 1.3.es的一些概念:文档和字段&#xff1b;索引和映射&#xff1b;Mysql与ES1.4.安装es、kibana部署单点es部署kibanaIK分词器安装IK分词器与测试扩展与停用词词典总结 部署es集群 2.索引库操作2.1.mapping映…

【Linux】Linux常见指令(上)

个人主页~ 初识Linux 一、Linux基本命令1、ls指令2、pwd命令3、cd指令4、touch指令5、mkdir指令6、rmdir指令7、rm指令8、man指令9、cp指令10、mv命令 Linux是一个开源的、稳定的、安全的、灵活的操作系统&#xff0c;Linux下的操作都是通过指令来实现的 一、Linux基本命令 先…

【Java项目】基于SpringBoot的【校园交友系统】

【Java项目】基于SpringBoot的【校园交友系统】 技术简介&#xff1a;系统软件架构选择B/S模式、SpringBoot框架、java技术和MySQL数据库等&#xff0c;总体功能模块运用自顶向下的分层思想。 系统简介&#xff1a;系统主要包括管理员和用户。 (a) 管理员的功能主要有首页、个人…

点击底部的 tabBar 属于 wx.switchTab 跳转方式,目标页面的 onLoad 不会触发(除非是第一次加载)

文章目录 1. tabBar 的跳转方式2. tabBar 跳转的特点3. 你的配置分析4. 生命周期触发情况5. 总结 很多人不明白什么是第一次加载&#xff0c;两种情况讨论&#xff0c;第一种情况假设我是开发者&#xff0c;第一次加载就是指点击微信开发者工具上边的编译按钮&#xff0c;每点击…

什么是Kafka?有什么主要用途?

大家好&#xff0c;我是锋哥。今天分享关于【什么是Kafka&#xff1f;有什么主要用途&#xff1f;】面试题。希望对大家有帮助&#xff1b; 什么是Kafka&#xff1f;有什么主要用途&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Kafka 是一个分布式流…

基于QT和C++的实时日期和时间显示

一、显示在右下角 1、timer.cpp #include "timer.h" #include "ui_timer.h" #include <QStatusBar> #include <QDateTime> #include <QMenuBar> Timer::Timer(QWidget *parent) :QMainWindow(parent),ui(new Ui::Timer) {ui->setup…

单片机-定时器中断

1、相关知识 振荡周期1/12us; //振荡周期又称 S周期或时钟周期&#xff08;晶振周期或外加振荡周期&#xff09;。 状态周期1/6us; 机器周期1us; 指令周期1~4us; ①51单片机有两组定时器/计数器&#xff0c;因为既可以定时&#xff0c;又可以计数&#xff0c;故称之为定时器…