javascript - 如何使用 Vue 为另一个 javascript 库赋值?
问题描述
使用Vue,我从远程页面获取json值,可以打印到页面。
但是我必须将这些值转移到另一个 javascript 库中。我怎样才能做到这一点?
页面中的数据 v-for="dta in dataTable" 或 {{dataTable.height}} 等。我可以这样使用它。但是不可能在另一个javascript中使用“var graph like = {{dataTable.height}}”,我该怎么做?
我想我将不得不一次下一个工单。因为首先 vue 获取远程数据,然后其他 javascript 应该可以工作,因为值将来自 vue。
索引.html
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="vue.min.js"></script>
<script src="apex/apexcharts.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script>
<style>
textarea {position: fixed;right: 0;top: 0;width: 300px;height: 400px;}
#testGraph1 {width:400px;position: fixed;top:0;right:0;margin-right:500px;}
</style>
</head>
<body>
<div id="app">
<form id="urlParameterForm">
<input type="date" name="startDate" id="startDate" />
<input type="date" name="endDate" id="endDate" />
<input
type="number"
name="pageNumber"
id="pageNumber"
value="1"
v-on:input="changePage"
/>
<input
type="button"
value="Filter"
id="Filter"
v-on:click="changeFilter"
/>
<p>Page : {{ pageActive }}</p>
</form>
<h3>{{title}}</h3>
<div v-for="dta in dataTable">
Height: {{dta.height}}, Type: {{dta.type}}
<h3>Categories</h3>
<ul v-for="dta2 in dta.graphData">
<li>{{dta2.categorie}}</li>
</ul>
<h3>Series</h3>
<ul v-for="dta2 in dta.graphData">
<li>{{dta2.serie}}</li>
</ul>
</div>
<div id='testGraph1'></div>
<textarea>
{{dataTable}}
</textarea>
</div>
<script src="getData.js"></script>
</body>
</html>
获取数据.js
const app = new Vue({
el: "#app",
devtools: true,
data: {
dataTable: [],
pageNumber: 1,
pageActive :0,
title:'Graph-1'
},
computed: {
url() {
return './dataSql.asp?pg=' + this.pageNumber
}
},
methods: {
changePage: function (event) {
console.log('Change Page',this.pageNumber);
this.pageNumber = event.target.value;
this.init();
},
changeFilter: function (event) {
console.log('Change Filter');
this.init();
},
init() {
let that = this;
console.log('init call');
$.ajax({
type: "POST",
url: that.url,
data:{
startDate:$('#startDate').val(),
endDate:$('#endDate').val(),
pageNumber:$('#pageNumber').val()
},
success: function (data) {
console.log('data remote call');
console.log(data.sqlData);
that.dataTable = data.sqlData;
}
});
}
},
mounted() {
this.init()
}
})
var barBasicChart = {
chart: {
height: 350, /*dta.height !Problem...*/
type: 'bar', /*dta.bar !Problem...*/
},
plotOptions: {
bar: {
horizontal: true,
}
},
dataLabels: {
enabled: false
},
series: [{
data: [10,5,3] /*dta.graphData.serie !Problem...*/
}],
xaxis: {
categories: ['Test-1','Test-2','Test-3'], /*dta.graphData.categorie !Problem...*/
},
fill: {
colors: '#ffcc33'
}
}
var bar_basic_chart = new ApexCharts(
document.querySelector("#testGraph1"),
barBasicChart
);
bar_basic_chart.render();
数据Sql.asp
{"sqlData":[{"height":350,"type":"bar","graphData":[{"categorie":"Bursa","serie":4},{"categorie":"Tekirdağ","serie":3}]}]}
问题更新 (2021-04-12)
作为“var app = new Vue ({...})”,我将 vue 代码分配给名为 app 的变量。
我可以通过输入 app._data.title 来访问“数据:{title}”。
但有趣的是,我无法通过键入“data: {....dataTable: []....}”来访问 json。
“var vueDatas = [];vueDatas = app._data.dataTable;”
解决方案
作为对我的评论的跟进,我发布了我最近构建的一个示例 Chart.js 项目中的组件。它展示了我在评论中描述的想法。它是使用 Vue CLI 用 Vue.js 2 编写的。
图表配置.js
const samplePieConfig = {
type: 'pie',
data: {
datasets: [{
data: [],
backgroundColor: [
'rgba(255, 0, 0, 0.8)',
'rgba(0, 255, 0, 0.8)',
'rgba(0, 0, 255, 0.8)',
]
}],
// These labels appear in the legend and in the tooltips when hovering different arcs
labels: [
'Red',
'Green',
'Blue'
]
},
options: {
responsive: false
}
}
export {
samplePieConfig
}
ChartTest.vue
<template>
<div class="chart-test">
<h3>Chart Test</h3>
<canvas id="chart-canvas" width="500" height="500" ref="chartref"></canvas>
</div>
</template>
<script>
import Chart from 'chart.js';
import { samplePieConfig } from '@/chart-configurations.js'
export default {
data() {
return {
chartObj: null,
chartConfig: samplePieConfig
}
},
props: {
chartData: {
type: Array,
required: true
}
},
methods: {
setChartData() {
this.chartConfig.data.datasets[0].data = this.chartData;
}
},
mounted() {
this.setChartData();
this.chartObj = new Chart(this.$refs.chartref, this.chartConfig);
},
// beforeDestroy() {
// // This necessary if canvas is reused for a new chart
// this.chartObj.destroy();
// }
}
</script>
应用程序.vue
<template>
<div id="app">
<chart-test v-if="dataReady" :chartData="pieChartData" />
</div>
</template>
<script>
import ChartTest from '@/components/ChartTest'
export default {
name: 'App',
components: {
ChartTest
},
data() {
return {
barChartData: [12, 19, 3, 5, 2, 3],
pieChartData: [10, 20, 30],
dataReady: true
}
},
methods: {
getData() {
this.dataReady = true;
}
},
mounted() {
// Simulate API call
setTimeout(this.getData(), 2000);
}
}
</script>
推荐阅读
- graph - Make:为一组目标运行通用的前置/后置规则
- elasticsearch - Elasticsearch 不返回结果;
- android - 刷卡到喜欢的项目
- c++ - 检查串口linux中是否有传入数据(cbInQue for linux)
- c++ - 使用函数集 c++
- python - 如何在熊猫中按组计算开始时间和结束时间之间的时间差?
- python - IndexError:PyCharm 中的列表索引超出范围
- python - 如何使 QCombobox 可扩展用于分层项目?
- r - 为什么在尝试创建平衡数据时 smote 不起作用?
- angularjs - Angular 6 中的 Chart.js 画布在将鼠标悬停在画布上时显示上一个图表