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

Vue开发系列——自定义组件开发

目录

一、组件开发优势

二、组件开发步骤

步骤1、编写组件代码

步骤2、 子组件注册

局部注册

全局注册

步骤3、父组件给自定义的组件传参并调用

三、总结


一、组件开发优势

组件化开发允许你构建可重用、可维护的代码模块,这些模块可以单独测试和组合使用。

二、组件开发步骤

步骤1、 编写组件代码

步骤2、注册组件(全局注册、局部注册)

步骤3、使用组件

步骤1、编写组件代码

组件的.vue文件中,可以定义模板、脚本和样式。 例如,开发一个显示柱状图的组件。其中,X轴数据、Y轴数据由父组件传入,子组件主要负责画出如下的柱状图:

子组件定义位置 serviceCompents/Course/chart.vue,定义的内容如下:

<template><div><el-button type="primary" @click="startGenEcharts()">刷新图表</el-button><div class="echart" id="mychart" :style="myChartStyle"></div></div>
</template>
<script>import * as echarts from 'echarts';export default {name: 'CourseChart',props: {dataX: {type: Array},dataY: {type: Array}},data(){return {myChartStyle: { float: "left", width: "100%", height: "300px" }, //图表样式}},methods: {startGenEcharts() {let dataX = this.dataX;let dataY =  this.dataY;let colorList = ['#0CB500', '#FFD634', '#01DAE2', '#FF5555', '#03B8DE', '#4AE879', '#FF8800', '#DBDBDB', '#ABEAFF'];var  myoption = {fontSize: 8,tooltip: {trigger: 'axis'},grid: {left: 0, //左边距right: 0, //走边距top: 15, //上边距bottom: 0, //下边距containLabel: true},xAxis: {name: '不及格率',//x轴名称nameLocation: 'middle', // 控制名字的位置,如 'start' 或 'middle'nameGap: 20,nameTextStyle: {fontSize: 15,color: 'red'},type: 'category',boundaryGap: [0, '30%'],//坐标轴斜着显示axisLabel: {interval: 0,rotate: 20,fontSize: 18},axisLine: {//x轴show: false, //线条隐藏lineStyle: {//文字颜色color: '#333'}},axisTick: {//y轴刻度线show: false},data: dataX},yAxis: {name: '平均分', // 直接在 yAxis 配置中设置 name,显示在坐标轴旁边(对于 category 类型)或下方(对于 value 类型)nameTextStyle: { // 定制坐标轴名称的样式color: 'red',fontSize: 15,fontWeight: 'bold'},nameLocation: 'start', // 可以是 'start' 或middle 'end',表示名称在坐标轴的开始或结束位置nameRotate: 0, //0或90 旋转角度,默认是水平方向,如果想让名称垂直显示可以设置旋转角度nameGap: 15, // 名称与坐标轴线之间的距离type: 'value',boundaryGap: [0, '30%'],axisLine: {//y轴show: false, //线条隐藏lineStyle: {//文字颜色color: '#333'}},axisLabel: {fontSize: 18},//网格线颜色splitLine: {show: true,lineStyle: {color: ['#307DCB'],width: 1,type: 'solid'}},axisTick: {//y轴刻度线show: false}},series: [{name: '平均成绩',data: dataY,type: 'bar',itemStyle: {normal: {color: function (params) {return colorList[params.dataIndex];},label: {show: true, //开启显示position: 'top', //在上方显示textStyle: {//数值样式color: '#333',fontSize: 18}}}}}]};this.myChart = echarts.init(document.getElementById("mychart"));this.myChart.setOption(myoption);//随着屏幕大小调节图表window.addEventListener("resize", () => {this.myChart.resize();});}},mounted(){this.startGenEcharts();}
}
</script>
<style scoped>
.run-box{margin-bottom: -1px;padding: 4px 8px;border: 1px solid #dcdfe6;border-radius: 3px;
}</style>

注意:

1、 使用Props传递数据到组件。比如示例中有如下定义,表示将从外部向组件传入dataX, dataY两个Array类型的数据

props: {dataX: {type: Array},dataY: {type: Array}
}

步骤2、 子组件注册

注册组件(全局注册、局部注册)

局部注册

父组件.vue文件中:

import CourseChart from '@src/serviceComponents/Course/chart';//子组件定义位置

export default {
  name: "courseScoreOverviewList",
  components: {
     CourseChart
  },

  data() {
    return {
...此时省略内容

全局注册

import Vue from 'vue';
import App from './App.vue';
import CourseChart from '.@src/serviceComponents/Course/chart';// 具体路径添加上.vue也可以Vue.component('CourseChart', CourseChart);

new Vue({
  render: h => h(App),
}).$mount('#app');

步骤3、父组件给自定义的组件传参并调用

注意: 通过props在父组件和子组件之间传递数据.实际上用于父组件给子组件传递数据

父组件.vue文件内容:

<el-dialog title="成绩分析" :visible.sync="dialogVisibleForEcharts" fullscreen><div style="margin-left: 80px; margin-bottom: 60px;"><CourseChart :dataY="this.list.map(item => toFixed(item.avgStuScores),2)" :dataX="this.list.map(item => toFixed(item.totalFailStuScoresRate,2))"></CourseChart></div></el-dialog>import CourseChart from '@src/serviceComponents/Course/chart';//子组件定义位置export default {name: "courseScoreOverviewList",components: {CourseChart},data() {return {
...此时省略内容

注意:在子组件中,你可以使用$emit触发事件,并在父组件中监听这些事件。

三、总结

1、 子组件可以继续组合形成更大的子组件来使用

2、 父组件可以通过props给子组件传递数据。 数据的类型可以多种多样.比如,

  • 当父组件通过props给子组件传递Array数据时,子组件声明:
props: {dataX: {type: Array},dataY: {type: Array}
}
  • 当父组件通过props给子组件传递字符串、整形等基本数据时,子组件声明:
props: ['productId', 'taskId', 'resultId']
  • 当父组件通过props给子组件传递Object数据时,子组件声明:

props: {

dataX: {

         type: Object

      }

}

http://www.dtcms.com/a/569592.html

相关文章:

  • 网站网页和网址的关系乐陵森林覆盖率
  • 贵阳响应式网站开发汕头网站推广找哪里
  • 测试——bug
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(13):文法和单词-第三课
  • 网站开发环境设计wordpress微信小程序one
  • 建行业网站的必要性沈阳网站维护
  • AI问数架构supersonic简介
  • 教育培训东莞网站建设怎样自学设计室内装修效果图
  • 解决盲盒藏品重复率高难题——定制化小程序商业解决方案
  • 石狮做网站网站备案条件
  • 【CUDA 编程思想】FwdKvcacheMla 算子详细数据流程讲解
  • 网站做成小程序wordpress笔记本主题下载失败
  • 探索 Maxwell:高效捕获 MySQL 数据变更的轻量级中间件
  • 3 LangChain 核心组件详解:构建企业级AI应用的基础设施
  • Pytorch 学习TensorBoard的使用
  • 经营虚拟网站策划书友汇网网站建设管理后台设置
  • 网站上的3d产品展示怎么做石家庄免费建站模板
  • HTML中JS监听输入框值的即时变化
  • [HTB] 靶机学习(十二)Eureka
  • Vue3 前端项目 Docker 容器化部署教程
  • 子页网站设计高端网站开发找哪家好
  • 做外单的网站行业前10的网站建设公
  • 产业投资工作坊: 清洁能源赛道分析与投资实战
  • 上海工程建设招投标网站定制app软件
  • 【蓝牙】BLE 数据收发实战指南(手机 App ↔ 嵌入式 Linux/BlueZ)
  • 万象园网站建设与开发网站建设要架服务器
  • 【Cache缓存】cache的刷新
  • 水坑攻击的攻击原理和特点+案例和防御方法
  • Git 如何从某个 commit 新建分支
  • 做商业广告有什么网站好推销的无锡百姓网推广