图表js名称标签未在vuejs中更新

Posted

技术标签:

【中文标题】图表js名称标签未在vuejs中更新【英文标题】:chart js name label not updating in vuejs 【发布时间】:2018-12-14 08:02:02 【问题描述】:

我正在使用 Vue JS 并在我的单页应用程序中使用图表,但在更新 Legend 时遇到了麻烦,经过大量搜索和尝试,它不会更新。请帮我纠正我的代码。 这是我的代码。

<script>
export default 
  name: 'Home',
  data: function data() 
  return 
      labels: [20181127, 20181126, 20181123, 20181122, 20181121, 20181120, 20181119, 20181116, 20181115, 20181114, 20181113, 20181112, 20181109, 20181108, 20181107, 20181106, 20181105, 20181102, 20181101, 20181031, 20181030, 20181029],
      dataset: [4220, 4260, 4380, 4390, 3420, 4570, 4600, 2630, 4650, 4670, 4370, 4670, 4730, 4730, 4730, 4770, 4370, 4770, 4580, 4780, 4980, 4780],
      rebar: [5220, 4260, 4380, 400, 4420, 4570, 4600, 4630, 2000, 4670, 4370, 4670, 4730, 4730, 3000, 4770, 4370, 4770, 4580, 4780, 4980, 4780],
      carbon: [3960, 4060, 4110, 4140, 4160, 4200, 4250, 4290, 4340, 4340, 4360, 4400, 4410, 4430, 4430, 4460, 4490, 4490, 4510, 4510, 4540, 4540],
      round: [5350, 5350, 5350, 5350, 5450, 5450, 5450, 5450, 5450, 5450, 5450, 5450, 5450, 5450, 5450, 5450, 5450, 5450, 5550, 5550, 5550, 5550],
      cold: [4220, 4260, 4380, 4390, 4420, 4570, 4600, 4630, 4650, 4670, 4670, 4670, 4730, 4730, 4730, 4770, 4770, 4770, 4780, 4780, 4780, 4780],
      color: [7500, 7550, 7550, 7550, 7550, 4550, 7600, 7600, 7700, 7700, 6000, 7700, 7700, 7700, 7700, 7700, 7700, 7700, 7650, 7650, 7650, 7650],
      galvanized: [4380, 4400, 4460, 4500, 4540, 4570, 4580, 4600, 4600, 4620, 4670, 4680, 4790, 4790, 4800, 4860, 4880, 4880, 4880, 4900, 4930, 4930],
      HRC: [3630, 3670, 3790, 3820, 3820, 3860, 3860, 3880, 3860, 3860, 3870, 3870, 3950, 3970, 4040, 4120, 4130, 4130, 4130, 4190, 4250, 4250],
      wirerod: [3970, 4040, 4190, 4300, 4300, 4470, 4580, 4680, 4700, 4720, 4730, 4790, 4870, 4870, 4920, 4960, 4980, 4990, 4990, 4990, 4990, 4990],
      options: 
        title: 
            display: true,
            text: 'Custom Chart Title'
        
      ,
      showcommon:false,
      showrebar: false,
      showcarbon: false,
      showround: false,
      showcold: false,
      showcolor: false,
      showGalvanized: false,
      showHRC: false,
      showWire: false
      ;
  ,
 
  methods: 
    addData: function addData() 
      this.dataset.push(this.dataentry);
      this.labels.push(this.datalabel);
      this.datalabel = 'bhumi';
      this.dataentry = '';
      this.roundentry = '';
      this.carbon = '';
      this.HRC = '';
      this.legend = legend;
    ,
    type () 
      this.showcommon = !this.showcommon
    ,
    type1 () 
      this.showrebar = !this.showrebar
    ,
    type2 () 
      this.showcarbon = !this.showcarbon
    ,
    type3 () 
      this.showround = !this.showround
    ,
    type4 () 
      this.showcold = !this.showcold
    ,
    type5 () 
      this.showcolor = !this.showcolor
    ,
    type6 () 
      this.showGalvanized = !this.showGalvanized
    ,
    type7 () 
      this.showHRC = !this.showHRC
    ,
    type8 () 
      this.showWire = !this.showWire
    
  
  
</script>
<b-row>
                        <b-col>
                          <chartjs-line :labels="labels" :data="carbon" :bind="true"></chartjs-line>
                        </b-col>
                        <b-col>
                          <chartjs-line :labels="labels" :data="rebar" :bind="true"></chartjs-line>                
                        </b-col>
                    </b-row>

我在这里使用 选项: 标题: 显示:真, text: '自定义图表标题' , 但它不起作用并显示默认图例。在代码中有一些 (type () this.showcommon = !this.showcommon ,) 请忽略这个。 这是我在 vue 中使用图表的链接: I used exact according to this link in vue. but cannot update the default legend.

【问题讨论】:

【参考方案1】:

这是一个常见的 Vue 反应性问题。您需要进行深层复制以使数据具有反应性。

一种解决方案是使用JSON.parse(JSON.stringify())

addData: function addData() 
  this.dataset.push(this.dataentry);
  this.labels.push(this.datalabel);
  this.labels = JSON.parse(JSON.stringify(this.labels))
  this.dataset = JSON.parse(JSON.stringify(this.dataset))
  this.datalabel = 'bhumi';
  this.dataentry = '';
  this.roundentry = '';
  this.carbon = '';
  this.HRC = '';
  this.legend = legend;

Vue list rendering caveats

【讨论】:

【参考方案2】:

如果您不使用vue-chartjs,我会推荐它,它可以为您处理反应性并且功能非常齐全。

vue-chartjs 在其文档 Here 中指出了一些反应性问题

【讨论】:

以上是关于图表js名称标签未在vuejs中更新的主要内容,如果未能解决你的问题,请参考以下文章

<SF 符号名称> 未在表 SymbolNameOverrides 中找到

VueJS 计算属性未在 DOM 上更新

组件已安装但模板标签未在生产环境中呈现(但在开发中呈现): Nuxtjs Vuejs Vuetifyjs Rollupjs

在 Chart.js 中设置图表标题、x 轴和 y 轴的名称?

剑道图表图例:左边的标签,右边的颜色

如何将状态名称放入地理图表/D3.js