从0开始写Vue组件(下)

上篇文章从0开始写Vue组件(上)
,实现了一个可以在父元素里面随意移动,缩放的mdiv组件。这篇文章我们将利用这个组件,来实现一个新的组件。准确的来说,是实现N多个具有可以随意移动、缩放的功能不尽相同的新组件。也就是说新组件继承了上一个组件的特性。

一些依赖

在上一个组件里面,使用了font awesome的css版本。使用也是很方便。

1) 下载最新的font awesome,复制web-fonts-with-css文件夹到src/assets目录下。
2) 在main.js文件里面加入import './assets/web-fonts-with-css/css/fontawesome-all.css'就可以在其他地方使用了。

使用方法类似于<span class="fas fa-ellipsis-v" v-show="isedit"></span>,注意fasfa-前缀。这样就可以显示图表了。

另外一个依赖就是echarts了。使用npm install echarts --save安装即可。

第二个组件

template

<template>
  <mdiv @mdiv='resize' :outline="outline" :isedit="isedit" :name="name">
    <div slot="container" class="container" ref="pie"></div>
    <div slot="contextmenu" class="contextmenu" v-show="ishid && isedit">
      <span class="fas fa-edit fa-fw"></span>
      <span class="fas fa-trash-alt fa-fw"></span>
    </div>
  </mdiv>
</template>

只需少量代码就能完成一个组件,这个组件是之前组件的父组件。也就是说之前的组件是这个组件的子组件。

mdiv是引入之前组件后的命名。

@mdiv='resize' :outline="outline" :isedit="isedit" :name="name"监听了子组件的mdiv事件。将参数通过pros进行向下传递。

实际上,子组件通过emit将信息向上传递给父组件。

mdiv里面有两个div,通过slot特性。这两个div实际上是被插入到子组件里面了。利用这个特性,这个组件,或者说文件,可以使用classcontainercontextmenu,他们其实是在mdiv.vue文件的style里。尽管有scope修饰了,但在这个文件里面使用,也是有效的。

script

<script>
import mdiv from '../mdiv'
import echarts from 'echarts'

export default {
  components: {
    mdiv
  },
  data () {
    return {
      ishid: false,
      isedit: true,
      outline: [10, 50, 400, 400],
      name: '测试',
      e: null,
      option: {
        legend: {},
        dataset: {
          source: [
            ['name', 'apple', 'orange', 'pear', 'lemon'],
            ['2018', 234, 446, 230, 124]
          ]
        },
        series: [{
          type: 'pie',
          radius: ['30%', '55%'],
          seriesLayoutBy: 'row'
        }]
      }
    }
  },
  methods: {
    resize (arg) {
      if (arg === 'resize') {
        this.e.resize()
        console.log('resize')
      } else if (arg === 'menu') {
        this.ishid = !this.ishid
      }
    }
  },
  mounted () {
    this.$nextTick(() => {
      this.e = echarts.init(this.$refs.pie, 'light')
      this.e.setOption(this.option)
    })
  }
}
</script>

这段代码应该不陌生了。除了开头的几行,剩下的在上一篇文章就讲了。

import X from Y,是指将Y导入到本文件中,并命名为X。

  components: {
    mdiv
  }

components是指将mdiv当作组件使用。这样就可以在template中,像HTML元素一样使用了。

使用pie组件

最后,可以在app.vue文件里面,像pie.vue使用mdiv.div一样使用pie.vue了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 目录 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 UI组件 element★13489 ...
    余生社会阅读 20,441评论 7 233
  • 苏韵锦说:我只是遗憾在我最需要你的时候,你却暂时忘记了我。 苏韵锦遇见沈居安的时候,莫郁华问她对沈居安什么感觉,她...
    亦弋阅读 472评论 0 0
  • 年末的忙碌终于结束,现在静下心来回到课堂,和丽芳老师一起继续学习思维导图。 关键词的阅读与提取是绘制思维导...
    礼智信家庭教育指导中心阅读 329评论 1 1
  • 岁月静好,流年辗转。我轻踏着时光的小径,循着文字的馨香,将如水的遐想,摇曳成笔尖的曼妙。一抹墨香,伴着夏日的和风,...
    笙南769阅读 494评论 1 1
  • 从小到大的过程中,总有许多记忆停留在离别时的那一帧,不是我看着别人转身离开,就是别人看着我转身离开。 而那别人,除...
    张硕2017阅读 146评论 0 3

友情链接更多精彩内容