Javascript &引用;这";不';无法在单击事件处理程序中工作

Javascript &引用;这";不';无法在单击事件处理程序中工作,javascript,vue.js,vuejs2,chart.js,vue-chartjs,Javascript,Vue.js,Vuejs2,Chart.js,Vue Chartjs,我已将click事件处理程序附加到我的ChartJS派生组件,如下所示: export default { extends: HorizontalBar, data() { return { my_data: [], options: { onClick: function(event, args) { //need to access my_data here } }, };

我已将click事件处理程序附加到我的ChartJS派生组件,如下所示:

export default {
  extends: HorizontalBar,
  data() {
    return {
      my_data: [],
      options: {
        onClick: function(event, args) {
           //need to access my_data here
        }
      },
    };
  },
}
我需要访问处理程序中的一个
数据
成员。不幸的是,
这个.my_data
在这里不起作用。ChartJS文档告诉我,此事件是在图表组件的上下文中调用的,而不是在我的Vue组件中调用的。我怎样才能访问
我的_数据

更新 因此,我现在使用@Dan定义处理程序的方式:

export default {
  extends: HorizontalBar,
  data() {
    return {
      my_data: [],
      options: {
        onClick: this.ClickHandler,
      },
    };
  },

  methods: {
    ClickHandler: function(event, args) {
      var datapoint = this.getElementAtEvent(event);
      var value = this.my_data[datapoint._datasetIndex];
    },
  }
}
处理程序调用正确,但
现在引用的是我的Vue组件,因此我没有任何对
图表
上下文的引用来调用其
getElementAtEvent


因此,如果我在上面的
onClick
前面声明它,我将在
this
中获得图表上下文,但不再能够访问
my_数据。如果我使用您的方式,我会得到
这个.my_数据
,但会丢失图表上下文。

您需要将处理程序放入
方法
对象中,然后从图表
选项
处理程序中引用它:

data(){
返回{
my_数据:[],
选项:{
onClick:this.ClickHandler,
}
};
},
方法:{
ClickHandler:函数(事件、点){
//下面是如何访问图表
常数c=此。\数据。\图表;
const datapoint=c.getElementAtEvent(事件)[0];
const indexBar=数据点。\u索引;
const indexSegment=datapoint.\u datasetIndex;
//对这个.my_数据、indexBar和indexSegment执行任何操作
}
}

组件可以通过
this.\u data.\u chart

访问图表。您需要将处理程序放入
方法
对象中,然后从图表
选项
处理程序中引用它:

data(){
返回{
my_数据:[],
选项:{
onClick:this.ClickHandler,
}
};
},
方法:{
ClickHandler:函数(事件、点){
//下面是如何访问图表
常数c=此。\数据。\图表;
const datapoint=c.getElementAtEvent(事件)[0];
const indexBar=数据点。\u索引;
const indexSegment=datapoint.\u datasetIndex;
//对这个.my_数据、indexBar和indexSegment执行任何操作
}
}

组件可通过
此访问图表。_数据。_图表

创建一个闭包变量

data() {
    const vm = this;
    return {
      my_data: [],
      options: {
        onClick: function(event, args) {
           this.chartjs.something;
           vm.my_data[]
        }
      }
}

创建一个闭包变量

data() {
    const vm = this;
    return {
      my_data: [],
      options: {
        onClick: function(event, args) {
           this.chartjs.something;
           vm.my_data[]
        }
      }
}

这看起来很有希望,但是我现在应该在
onClick:
前面写些什么呢?请注意,我需要
图表
对象引用以及Vue对象引用。请注意,我在JS中附加事件处理程序,而不是通过HTML标记。您能显示一些相关的代码或模板吗?现在还不清楚你还想达到什么目标图表的上下文来自哪里?看看你以前是如何在模板中得到它的,这会很有帮助。(我从来没有看过ChartJS,或者我可能会对此有更好的理解。)ChartJS会自动将此上下文传递给事件处理程序。它没有完整的文档记录,但是你可以看到一个简短的注释。就是这样<代码>这个。_数据。_图表
是我需要的东西。就像雨天的“garma garam pikoray”一样美味。谢谢。这看起来很有希望,但是我现在应该在点击
onClick:
前写些什么呢?请注意,我需要
图表
对象引用以及Vue对象引用。请注意,我在JS中附加事件处理程序,而不是通过HTML标记。您能显示一些相关的代码或模板吗?现在还不清楚你还想达到什么目标图表的上下文来自哪里?看看你以前是如何在模板中得到它的,这会很有帮助。(我从来没有看过ChartJS,或者我可能会对此有更好的理解。)ChartJS会自动将此上下文传递给事件处理程序。它没有完整的文档记录,但是你可以看到一个简短的注释。就是这样<代码>这个。_数据。_图表
是我需要的东西。就像雨天的“garma garam pikoray”一样美味。谢谢。@Stephen Thomas的回答应该有用。。。你可以把丹的答案和他的答案结合起来,看看他的答案是如何运作的。@Stephen Thomas的答案应该是有效的。。。你可以把丹的答案和他的答案结合起来,看看他的答案是如何运作的。非常感谢。刚发现这和丹的答案一样有效。不能选择多个答案,但这绝对值得投票。非常感谢。刚发现这和丹的答案一样有效。不能选择多个答案,但这绝对值得投票。