Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Vue.js默认函数参数解构和';这';_Javascript_Vue.js - Fatal编程技术网

Javascript Vue.js默认函数参数解构和';这';

Javascript Vue.js默认函数参数解构和';这';,javascript,vue.js,Javascript,Vue.js,我在尝试声明默认参数并结合解构时,使用this引用数据时遇到问题。有人知道怎么做吗 activated () { this.fillData() }, data () { return { chartData: { distributionInitialData: { // data here } } } }, methods: { fillData ({ must = this.chartData.dist

我在尝试声明默认参数并结合解构时,使用
this
引用
数据
时遇到问题。有人知道怎么做吗

activated () {
  this.fillData()
},

data () {
  return {
    chartData: {
      distributionInitialData: {
        // data here
      }
    }
  }
},

methods: {
  fillData ({
      must = this.chartData.distributionInitialData,
      nice = this.chartData.distributionInitialData
    }) {
    // do something
    // function doesn't even get here because it gets error:
    // TypeError: Cannot read property 'must' of undefined
    // at VueComponent.fillData (Component.vue?4e6a:230)
    // at VueComponent.activated (Component.vue?4e6a:123)
  }
}
你能行

fillData ({ must, nice}) {
    must = must || this.chartData.distributionInitialData
    nice = nice || this.chartData.distributionInitialData

    // do something
}

您需要设置参数(对象)的默认值,但不需要设置其属性

methods: {
  fillData ({must, nice} = {
      must: this.chartData.distributionInitialData,
      nice: this.chartData.distributionInitialData
    }) {
    // do something
  }
}

根据Bergi的建议进行更新

methods: {
  fillData ({
      must: this.chartData.distributionInitialData,
      nice: this.chartData.distributionInitialData
    } = {}) {
    // do something
  }
}


仅供参考,这里有一个简单的问题。

因此问题与Vue在创建组件时如何将方法绑定到组件有关。函数定义没有访问实例的权限,但您可以在其中使用
this

最简单的解决方案是立即检查未定义项,并根据所需的默认值进行设置

fillData({ must, nice }) {
    if (must === undefined) must = this.chartData.distributionInitialData;
    if (nice === undefined) nice = this.chartData.distributionInitialData;

    // any other code here
}
您还可以尝试使用arrow函数,看看它是否解决了这个问题,因为引入它是为了以更具体的方式绑定到
this
。也许是这样的:

fillData = ({ 
    must = this.chartData.distributionInitialData, 
    nice = this.chartData.distributionInitialData 
}) => {
    // any other code here
}

不确定是否重复,但肯定相关:我的问题更多的是无法访问
。所有其他的事情都在起作用。现在我不得不接受两个参数,而不是分解一个,但这个问题仍然有效——我认为这是一个非常有趣的问题需要解决。访问
这个
就可以了。问题是您正在为这些属性赋值,而不是将它们用作默认值。我尝试使用
=
,但因为它是JSON,所以我不得不使用
,这就是问题所在。如果我使用
=
,那么我会得到
未定义的
错误。周围没有JSON。它是方法定义中的一种分解模式。您可以发布完整的代码(方法体,以及您如何调用它)和您收到的完整错误消息吗?这不适用于
fillData({must:2})
though@Bergi谢谢,我注意到了,我更新了你的答案。