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谢谢,我注意到了,我更新了你的答案。