Chartjs + Vue.js - 无法读取未定义的属性'_meta'

时间:2018-04-13 06:31:19

标签: javascript vue.js chart.js

我正在使用Vue.js + Chartjs构建应用程序。我遇到一个问题,我对服务进行http调用以获取数据,解析它并将其传递给我的Chartjs组件。但是,我一直收到错误<template> <Chartjs :data="chartData" /> </template> export default { data () { return { chartData: false } }, created () { this.getData() }, methods: { getData() { const opts = { url: 'some_url', method: 'get' } request.callRoute(opts).then(results => { this.chartData = results.data }).catch(err => { console.log(err) }) } }, components: { Chartjs } }

以下是我的组件的相关部分:

chartData

注意 - 如果我使用从我的请求返回的数据对String requestUrl = "https://myserver/mypath/Message_166741.zip"; HttpGet httpget = new HttpGet(String requestUrl = "https://myserver/mypath/Message_166741.zip";); HttpResponse response = httpClient.execute(httpget); HttpEntity entity = response.getEntity(); InputStream inputStream = entity.getContent(); byte[] decompressedInputStream = decompress(inputStream); String content = null; content = new String(decompressedInputStream, StandardCharsets.UTF_8); String originFileName = new SimpleDateFormat("yyyyMMddHHmm'_origin.xml'").format(new Date()); String originFileNameWithPath = String.format("C:\\temp\\Tests\\%1$s", originFileName); // File contains the expected umlauts FileUtils.writeStringToFile(new File(originFileNameWithPath), content); String payloadUTF8 = Base64.encodeBase64String(ZipUtils.compress(content.getBytes("UTF-8"))); String payload = Base64.encodeBase64String(ZipUtils.compress(content.getBytes())); String payloadJavaBase64 = new String(java.util.Base64.getEncoder().encode(ZipUtils.compress(content.getBytes()))); String xmlMessageJavaBase64; byte[] compressedBinaryJavaBase64 = java.util.Base64.getDecoder().decode(payloadJavaBase64); byte[] decompressedBinaryJavaBase64= ZipUtils.decompress(compressedBinaryJavaBase64); xmlMessageJavaBase64 = new String(decompressedBinaryJavaBase64, "UTF-8"); String xmlMessageUTF8; byte[] compressedBinaryUTF8 = java.util.Base64.getDecoder().decode(payloadUTF8); byte[] decompressedBinaryUTF8 = ZipUtils.decompress(compressedBinaryUTF8); xmlMessageUTF8 = new String(decompressedBinaryUTF8, "UTF-8"); String xmlMessage; byte[] compressedBinary = java.util.Base64.getDecoder().decode(payload); byte[] decompressedBinary = ZipUtils.decompress(compressedBinary); xmlMessage = new String(decompressedBinary, "UTF-8"); String processedFileName = new SimpleDateFormat("yyyyMMddHHmm'_processed.xml'").format(new Date()); String processedFileNameUTF8 = new SimpleDateFormat("yyyyMMddHHmm'_processedUTF8.xml'").format(new Date()); String processedFileNameJavaBase64 = new SimpleDateFormat("yyyyMMddHHmm'_processedJavaBase64.xml'").format(new Date()); // These files do not contain the umlauts anymore. // Instead of the umlauts a replacement character is inserted (0xEF 0xBF 0xBD (efbfbd)) String processedFileNameWithPath = String.format("C:\\temp\\Tests\\%1$s", processedFileName); String processedFileNameWithPathUTF8 = String.format("C:\\temp\\Tests\\%1$s", processedFileNameUTF8); String processedFileNameWithPathJavaBase64 = String.format("C:\\temp\\Tests\\%1$s", processedFileNameJavaBase64); FileUtils.writeStringToFile(new File(processedFileNameWithPath), xmlMessage); FileUtils.writeStringToFile(new File(processedFileNameWithPathUTF8), xmlMessageUTF8); FileUtils.writeStringToFile(new File(processedFileNameWithPathJavaBase64), xmlMessageJavaBase64); 字段进行硬编码,则图表呈现正常。但是,如果我首先为我的数据发出http请求,它就不起作用。

有谁知道可能会发生什么?

提前致谢!

1 个答案:

答案 0 :(得分:2)

Vue将使用初始chartData(这是一个布尔值)渲染组件。您应该使用v-if或其他逻辑并在获得响应时呈现Chartjs组件。例如,您可以在chartData为false时显示加载消息/动画。