Как передать переменное количество наборов данных в данные диаграммы без «волшебства» _ _observer (с использованием vuecharts.js)?

Я использую charts.js для Vue и пытаюсь перенести на диаграмму переменное количество наборов данных (которые содержат backgroundColour, data и label). Объект данных должен регистрировать что-то вроде этого:

Как передать переменное количество наборов данных в данные диаграммы без «волшебства» _ _observer (с использованием vuecharts.js)?

Однако наборы данных регистрируют дополнительный объект-наблюдатель, а диаграммы не отображаются. Это мой код:

   let dynamicDataCollection = [];
        for (i =0; i < allDeptNames.length; i++) {
            let datasets = [
                {
                label: allDeptNames[i],
                backgroundColor: barColours[i],
                data: [spaceIterationIns[i].length] 
                }
            ]
            dynamicDataCollection.push(datasets);
        }
        that.datacollection2 = {
            labels: ['Weekly'],                
            datasets: [                              
            ]
        }
        that.datacollection2.datasets = dynamicDataCollection;
        console.info(that.datacollection2);

это мой объект данных:

data () {
    return {
        windowWidth: 0,
        windowHeight: 0,
        datacollection2: null,
        chartData: { 

        }, chartOptions: {

        }         
    }
},

это мой шаблон:

     <charts  v-if = "last7DaysSelected" ref = "visits_per_dept_bar"
             :css-classes = "'visitsChart_bar'" 
             :chart-id = "'visits_per_dept_bar'" 
             :height = "150" 
             :options = "chartOptions"
             :chart-data = "datacollection2" 

      ></charts>

это мой chart.js

import {Line, mixins } from 'vue-chartjs'
Chart.defaults.global
let chartOptions = Chart.defaults.global;
chartOptions.defaultFontFamily= "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Helvetica Neue', sans-serif"

const { reactiveProp } = mixins
export default {
  extends: Line,
  mixins: [reactiveProp],
  props: ['options'],

  mounted () {
    let that = this;

    that.chartOptions = { 
      scales: {
        yAxes: [{
            ticks: {
                suggestedMin: 0,      
            },       
        }],
        xAxes: [{
            ticks: {
                suggestedMin: 0,    
            },
        }],
    },
    legend: {
        labels: {
            fontColor: 'rgb(168, 119, 181)',
        }
    }
  },
    this.renderChart(this.chartData, that.chartOptions)
  }
}

и это объект, который я получаю ... Как передать переменное количество наборов данных в данные диаграммы без «волшебства» _ _observer (с использованием vuecharts.js)?

Расширенный вид: Как передать переменное количество наборов данных в данные диаграммы без «волшебства» _ _observer (с использованием vuecharts.js)?

Очевидно, что Vue пытается творить чудеса, но означает ли это, что я не могу визуализировать свою диаграмму с переменным количеством наборов данных? Слишком опасно предотвращать объект {_ ob _}. Я пробовал это, и программа vue.charts.js требует некоторой реактивности). Есть какой-либо способ сделать это? Может быть, уловка, позволяющая пройти через этот для цикла внутри объекта datacollection2? вместо того, чтобы помещать объекты набора данных в datacollection2? Есть предположения?

github.com/samuelantonioli/vue-static или github.com/rpkilby/vue-nonreactive выглядят так, будто они сделают фокус за вас.
ceejayoz 01.10.2018 16:35

не могли бы вы поделиться своим объектом данных

Boussadjra Brahim 01.10.2018 17:19

Я поделился своим объектом данных.

Joao Alves Marrucho 01.10.2018 17:23

@ceejayoz Я пробовал статический компонент vue, но он не работает. программа Datasets из vue chart.js была написана как реактивная, и именно эту переменную / объект мне нужно передать в объект dataCollection. если я заставлю это быть статичным, диаграмма не будет обновляться (он жалуется, что может установить свойство _meta в строку) ... но в любом случае спасибо. может быть полезным инструментом в другой ситуации

Joao Alves Marrucho 01.10.2018 17:48

Нет необходимости в каких-либо внешних библиотеках - они встроены в Vue;)

Andrey Popov 01.10.2018 18:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
562
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вместо этого используйте параметры:

name: 'myComponent',
data: () {
  return {
    some: 'properties'
  }
},
nonReactiveData: {
  whatever: 'you like'
}

Это в основном создает ваш компонент с option с именем nonReactiveData. Затем вы можете использовать его в своем html, например:

<some-component :data = "$options.nonReactiveData">

Или, если вам это нужно в вашем скрипте:

methods: {
  someMethod() {
    console.info(this.$options.nonReactiveData)
  }
}

Надеюсь, это поможет :)

Привет. Это полезно знать, но, как я уже сказал ранее в своем ответе на @ceejayoz, я считаю, что программа наборы данных из vue chart.js была написана как реактивная, и это именно та переменная / объект, которую мне нужно отправить в объект dataCollection. Но в любом случае спасибо, это связано и может быть полезным инструментом в другой ситуации, поэтому я проголосовал за ваш ответ.

Joao Alves Marrucho 01.10.2018 18:09

Исправлено путем объединения объекта dynamicDataCollection:

     that.dynamicDataCollection = [];
        for (i =0; i < allDeptNames.length; i++) {
            let datasets = [
                {
                label: allDeptNames[i],
                backgroundColor: barColours[i],
                data: [spaceIterationIns[i].length] 
                }
            ]
            that.dynamicDataCollection.push(datasets);
        }
// here
        let dynamicFlat = [].concat.apply([], that.dynamicDataCollection)  
        that.datacollection2 = {
            labels: ['Weekly'],                
            datasets: [                           
            ]
        }
// and then here
        that.datacollection2.datasets = dynamicFlat;

Другие вопросы по теме