shzlw/zeu

请问下,要是在vue下使用,需要自己封装吗?

Closed this issue · 2 comments

主要做后端,对前端vue了解了一点,想在vue中使用,大佬能不能提供个思路我去试试

shzlw commented

是的,是需要wrap一下,我看了下Vue的文档,自己试了wrap一个控件,可以运行,你可以试试哈。

"dependencies": {
  "vue": "^2.5.2",
  "vue-router": "^3.0.1",
  "zeu": "^1.1.1"
},

TextMeter.vue

<template>
  <canvas :id="id" :width="width" :height="height"></canvas>
</template>

<script>
import * as zeu from 'zeu';
export default {
  name: 'TextMeter',
  props: {
    id: String,
    width: Number,
    height: Number,
    options: Object,
    displayValue: String,
    value: Number
  },
  mounted() {
    if (!this.chart) {
      this.init();
    }
  },
  watch: {
    displayValue(val) {
      this.chart.displayValue = val;
    },
    value(val) {
      this.chart.value = val;
    }
  },
  beforeDestroy() {
    this.destory();
  },
  methods: {
    init() {
      let textMeter = new zeu.TextMeter(this.$el.id, this.options);
      textMeter.displayValue = this.displayValue;
      textMeter.value = this.value;
      this.chart = textMeter;
    },
    destory() {
      this.chart.destroy();
      this.chart = null;
    }
  }
}
</script>
</script>

TestPage.vue

<template>
   <div>
     <button @click="update">Update</button>
     <TextMeter :id="textMeter.id" :width="textMeter.width" :height="textMeter.height" 
      :displayValue="displayValue" :value="value" :options="textMeter.options"></TextMeter>
   </div>
</template>

<script>
import TextMeter from './TextMeter';

export default {
  name: 'TestPage',
  components: {
    TextMeter
  },
  data () {
    return {
      textMeter: {
        id: 'test',
        width: 200,
        height: 100,
        options: {}
      },
      displayValue: 'ZEU',
      value: 80
    }
  },
  methods: {
    update() {
      this.displayValue = 'NEW';
      this.value = 30;
    }
  }
}
</script>

谢谢大佬,学到了,很不错