vue中用new Function重新渲染生成echarts图表时无法读取未定义属性?

我在尝试用vue写一个类echarts官网那种的在线生成图表示例,script是我从ace编辑器内容区传给图表组件的图表配置字符串

changeChart(script) {    
      let myChart = this.$echarts.init(this.$refs.chartRef)
        // 清除当前图表
      myChart.clear()
      try {
    // 将字符串中的"echarts"替换为"this.$echarts"
      script = script.replace(/echarts/g,'this.$echarts')
        let func = new Function(
          `var ROOT_PATH = 'https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/examples';var option;let myChart = this.$echarts.init(this.$refs.chartRef);` +
            script +
            `myChart.clear();option && myChart.setOption(option);`        
        ).bind(this)
        func()
      } catch (e) {
        console.log(e)
      }
    },

当我用echarts官网的示例代码测试时大部分是可以正常运行的,但是当测试到像是下面这种就会报如下错误,请问是我的编辑区script字符串哪里出错,该怎么修改

阅读 2.5k
2 个回答

那就是说 echartsundefined,给它赋值就能解决这个错误:

var echarts = this.$echarts;

忘记了new Function()可以传参进去了

changeChart(script) {    
      // 用echarts时,如果不存在DOM,就会报错,处理方法先检查是否DOM存在:
      if(this.$refs.chartRef==null){return}
      // 用echarts时,如果存在DOM,就会报存在警告,处理方法删除DOM:
      this.$echarts.dispose(this.$refs.chartRef)
      try {
        let func = new Function('echarts','ecStat',
          `const ROOT_PATH = 'https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/examples';var option;let myChart = echarts.init(this.$refs.chartRef);` +
            script +
            `myChart.clear();option && myChart.setOption(option);`        
        ).bind(this)
        func(this.$echarts,this.$ecStat)
      } catch (e) {
        console.log(e)
      }
    },

这样就解决了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏