首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VueJS2 -计算属性/方法是否设置了Vue.data?

VueJS2 -计算属性/方法是否设置了Vue.data?
EN

Stack Overflow用户
提问于 2017-02-23 18:23:03
回答 1查看 264关注 0票数 1

我已经用Vue构建了一个表单,在该表单中,我将需要提交的所有数据复制到单独的params对象中,处理它,然后通过AJAX提交该对象。除了一个恼人的数组,它似乎直接设置了我的Vue.data对象,一切都很好。

这是我的密码:

代码语言:javascript
复制
getParams: function () {
  return {
    organism:           this.organism,
    species_id:         this.speciesID,
    bioinformatics:     this.bioinformatics,
    // ... more params
  }
}

sanitizeParams: function() {
  var params = this.getParams();

  // other validations here (that work fine)     

  if(this.isOther(this.bioinformatics)) {

    console.log(this.bioinformatics) // ['other']
    console.log(params.bioinformatics) // ['other']

    var idx = params.bioinformatics.indexOf('other');
    params.bioinformatics.splice(idx,1);

    console.log(this.bioinformatics) // [] <-- Why does this change?!
    console.log(params.bioinformatics) // []        

    params.bioinformatics.push(this.bioinformaticsOther);
  }
  return params;
},

saveForm: function () {
  var params = this.sanitizeParams();
  if(this.formValidation) {
    // send ajax with correct params
  }
},

生物信息学是一个复选框选择,其中包括“其他”在其选项--反过来,打开一个输入框,用户可以插入自己的文本。我试图完成的是从params.data.bioinformatics数组中删除“other”并将Vue.data.bioinformaticsOther添加到其中。

发生的事情是,我的Vue.data.bioinformatics也被改变了!当params.bioinformatics.splice运行时,两个数组都会发生变化,而不是只改变我的本地params对象(正如我预期的那样)。这反过来会导致我的UI停止正常工作,因为Vue存储在数据中的选项值不再是“other”。我开始使用这些函数作为计算属性,但我将它们更改为方法,以查看是否能够解决问题,但同样的事情也会发生(因此出现了标题)。

总的来说,我对Vue和JS还是很陌生的,所以我很抱歉,如果这是很明显的事情,但是我已经有一段时间很困惑了(特别是因为我使用相同方法的其他非数组选项工作得很好)。

很抱歉,如果这个描述混淆了,如果需要的话,我会添加更多的数据。

编辑:在代码中添加了控制台日志,这样就更容易理解问题了。还解决了描述中变量名错误的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-23 19:27:16

我想您在这里的问题在于getParams。正如所写的,getParams将返回一个通过引用传递生物信息学的对象。换句话说,params.bioinformaticsdata.bioinformatics是指向同一个数组的指针。因此,当您修改params.bioinformatics时,您将看到正在进行日志记录的行为。相反,您可以将您的生物信息学属性作为副本而不是引用。

代码语言:javascript
复制
getParams: function () {
  return {
    organism:           this.organism,
    species_id:         this.speciesID,
    bioinformatics:     this.bioinformatics.slice(),
    // ... more params
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42423397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档