Форум программистов, компьютерный форум, киберфорум
JavaScript: Vue.js
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
3 / 3 / 1
Регистрация: 26.12.2019
Сообщений: 170
1

Динамический График

13.10.2021, 14:20. Показов 1617. Ответов 3

Author24 — интернет-сервис помощи студентам
Я хочу чтобы из значений, которые получаются из input они переносились в круговую диаграмму ну и обновлялись каждый новый ввод. Но вообще не понимаю как нужно связать переменные в dataset и как правильно использовать обнову.
файл about.vue
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<template>
  <div class="about">
      <div class="container">
          <div class="profile__div">
              <img src="../components/user_person_profile_avatar_icon_190943.png" alt="">
                <div class="buttom__prof">
                    <input v-model.number="myMoney" />
                    <div class="div__but">
                        <button class="but" @click="addMoney">Add</button>
                        <button class="but" @click="takeMoney">Take</button>
                    </div>
                </div>
          </div>
          <div class="info__div">
              <div class="state__line">
                  <h1 style="text-align:center;">dollar: {{this.dollar}}</h1>
              </div>
              <div class="char__div">
                    
                    <pie-example/>
              </div>
          </div>
          <div class="value__div">
                <div class="value__money">$: {{dollar}}</div>
                <div class="value__money">рубль: {{rub}}</div>
                <div class="value__money">юань: {{uin}}</div>
          </div>
      </div>
  </div>
</template>
<script>
 
  import PieExample from '../components/PieExample'
 
  export default {
    components: {
      PieExample,
 
    },
    data () {
      return {
        dataPoints: null,
        height: 20,
        myMoney: 0,
        dollar: 0,
        rub:0,
        uin:0
      }
    },
    mounted () {
      setInterval(() => {
        this.fillData()
      }, 2000)
    },
    methods: {
        addMoney() {
            this.dollar += this.myMoney
            this.rub += this.myMoney * 70
            this.uin += this.myMoney * 111
        },
        takeMoney() {
            this.dollar -= this.myMoney
            this.rub -= this.myMoney * 70
            this.uin -= this.myMoney * 111
        },
      increaseHeight () {
        this.height += 10
      },
      
      fillData () {
        this.dataPoints = {
          labels: [],
          datasets: [
            {
              label: 'Data One',
              backgroundColor: '#f87979',
              data: []
            }
          ]
        }
      }
    },
    computed: {
      myStyles () {
        return {
          height: `${this.height}px`,
          position: 'relative'
        }
      }
    }
  }
</script>

file BaseChart.js
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import Chart from 'chart.js'
 
export function generateChart (chartId, chartType) {
  return {
    render: function (createElement) {
      return createElement(
        'div', {
          style: this.styles,
          class: this.cssClasses
        },
        [
          createElement(
            'canvas', {
              attrs: {
                id: this.chartId,
                width: this.width,
                height: this.height
              },
              ref: 'canvas'
            }
          )
        ]
      )
    },
 
    props: {
      chartId: {
        default: chartId,
        type: String
      },
      width: {
        default: 400,
        type: Number
      },
      height: {
        default: 400,
        type: Number
      },
      cssClasses: {
        type: String,
        default: ''
      },
      styles: {
        type: Object
      },
      plugins: {
        type: Array,
        default () {
          return []
        }
      }
    },
 
    data () {
      return {
        _chart: null,
        _plugins: this.plugins
      }
    },
 
    methods: {
      addPlugin (plugin) {
        this.$data._plugins.push(plugin)
      },
      generateLegend () {
        if (this.$data._chart) {
          return this.$data._chart.generateLegend()
        }
      },
      renderChart (data, options) {
        if (this.$data._chart) this.$data._chart.destroy()
        if (!this.$refs.canvas) throw new Error('Please remove the <template></template> tags from your chart component. See https://vue-chartjs.org/guide/#vue-single-file-components')
        this.$data._chart = new Chart(
          this.$refs.canvas.getContext('2d'), {
            type: chartType,
            data: data,
            options: options,
            plugins: this.$data._plugins
          }
        )
      }
    },
    beforeDestroy () {
      if (this.$data._chart) {
        this.$data._chart.destroy()
      }
    }
  }
}
 
export const Bar = generateChart('bar-chart', 'bar')
export const HorizontalBar = generateChart('horizontalbar-chart', 'horizontalBar')
export const Doughnut = generateChart('doughnut-chart', 'doughnut')
export const Line = generateChart('line-chart', 'line')
export const Pie = generateChart('pie-chart', 'pie')
export const PolarArea = generateChart('polar-chart', 'polarArea')
export const Radar = generateChart('radar-chart', 'radar')
export const Bubble = generateChart('bubble-chart', 'bubble')
export const Scatter = generateChart('scatter-chart', 'scatter')
 
export default {
  Bar,
  HorizontalBar,
  Doughnut,
  Line,
  Pie,
  PolarArea,
  Radar,
  Bubble,
  Scatter
}
file PieExample.js
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import { Pie } from '../components/BaseCharts'
 
 
export default {
  extends: Pie,
 
 
  mounted () {
    this.renderChart({
      labels: ['backs', 'uin', 'Rub'],
      datasets: [
        {
          backgroundColor: [
            '#41B883',
            '#E46651',
            '#00D8FF',
    
          ],
          data: [10,10,10]
        }
      ]
    }, {responsive: true, maintainAspectRatio: false})
  }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2021, 14:20
Ответы с готовыми решениями:

Динамический график
Доброго времени суток. Имеется контрол chart, который каждую минуту дорисовывается. Рисуется...

Динамический график
здравствуйте) подскажите пожалуйста, как создать динамический график?

Динамический график
Подскажите как нарисовать динамический график такой как в диспетчере задач

Динамический график в JS
Здравствуйте. Мне нужно сделать график на основе секундомера. по x - текущие время, у - количество...

3
431 / 302 / 89
Регистрация: 03.12.2015
Сообщений: 738
15.10.2021, 13:57 2
Цитата Сообщение от ArtoriasDark Посмотреть сообщение
Я хочу чтобы из значений, которые получаются из input они переносились в круговую диаграмму ну и обновлялись каждый новый ввод. Но вообще не понимаю как нужно связать переменные в dataset и как правильно использовать обнову.
Компонент-диаграмма должен во входных параметрах принимать объект (данные диаграммы, dataset), который нужно нарисовать. При обновлении "ввода" - меняешь этот объект. Срабатывает рективность - Vue видит, что объект поменялся, и перерисовывает диаграмму.
0
3 / 3 / 1
Регистрация: 26.12.2019
Сообщений: 170
15.10.2021, 14:00  [ТС] 3
так а как это реализовать? в плане кода.

Добавлено через 2 минуты
Я тут чуточку подправил код, сделал чище так сказать.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import { Pie } from 'vue-chartjs'
 
export default {
  extends: Pie,
 
  mounted () {
    this.renderChart({
      labels: ['USD', 'ETH', 'BTC'],
      datasets: [
        {
          backgroundColor: [
            '#FFA500',
            '#6495ED',
            '#B22222',
    
          ],
          data: [1,2,3]
 
        }
      ]
 
    }, {responsive: true, maintainAspectRatio: false})
  }
}

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<template>
  <div class="about">
      <div class="container">
          <div class="profile__div">
              <div class="img__prof">
                <img  src="../components/user_person_profile_avatar_icon_190943.png" alt="">
              </div>
                <div class="buttom__prof">
                    <input v-model.number="myMoney" />
                    <div class="div__but">
                        <button class="but" @click="addMoney">Add</button>
                        <button class="but" @click="takeMoney" >Take</button>
                    </div>
                </div>
          </div>
          <div class="info__div">
              <div class="state__line">
                  <h1 style="text-align:center;">USD: {{this.USD}}</h1>
              </div>
              <div class="char__div">
                  <pie-example></pie-example>
              </div>
          </div>
          <div class="value__div">
                <div class="value__money">USD: {{USD}}</div>
                <div class="value__money">ETH: {{ETH.toFixed(4)}}</div>
                <div class="value__money">BTC: {{BTC.toFixed(5)}}</div>
          </div>
      </div>
  </div>
</template>
<script>
  import PieExample from '../components/PieExample'
  
 
  export default {
    components: {
      PieExample,
 
    },
    data () {
      return {
        myMoney: null,
        USD: 0,
        ETH:0,
        BTC:0
      }
    },
    methods: {
        addMoney() {
            this.USD += this.myMoney
            this.ETH += this.myMoney * 0.0003
            this.BTC += this.myMoney * 0.000017
        },
        takeMoney() {
            this.USD -= this.myMoney
            this.ETH -= this.myMoney * 0.0003
            this.BTC -= this.myMoney * 0.000017
        },
 
 
    }
}
 
</script>
0
431 / 302 / 89
Регистрация: 03.12.2015
Сообщений: 738
15.10.2021, 20:00 4
Лучший ответ Сообщение было отмечено ArtoriasDark как решение

Решение

В PieExample добавить props например chart_values.

В главном компоненте добавить поле my_values. Передавать значение в дочерний компонент
HTML5
1
<PieExample chart_values="my_values"/>
В addMoney и takeMoney добавить
Javascript
1
this.my_values = [...] // сюда данные для графика
Код построения графика (this.renderChart) вынести в отдельную функцию, например updateChart(data). Вызывать ее из mount и при смене chart_values

Чтобы отслеживать изменение свойства chart_values добавь в компонент:
Javascript
1
2
3
4
5
watch: {
  chart_values: function(newVal, oldVal) { // watch it
          this.updateChart(chart_values)
        }
}
0
15.10.2021, 20:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2021, 20:00
Помогаю со студенческими работами здесь

Динамический график
Добрый день! Подскажите есть ли в MFC подобие компонента C++ buildera TChart?

Динамический График Chart
Добрый вечер,у меня проблемка с графиком,никак не пойму как сделать.По мере появления новых...

Динамический график с масштабированием
Здравствуйте, помогите реализовать следующую задумку. Вообщем есть координаты точек Х и У типа...

Динамический график на канве
В весьма полезной теме https://www.cyberforum.ru/delphi-beginners/thread122904.html говорится о...

Как построить динамический график
Поделитесь опытом , если не трудно. При помощи каких свойств можно этого достичь. Вот рисую...

Как создать динамический график
Как создать постоянно продолжающийся график из 2 постоянно меняющихся переменных Заранее спасибо


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru