【问题标题】:Vue.js can't copy array to another arrayVue.js 无法将数组复制到另一个数组
【发布时间】:2018-05-22 14:05:02
【问题描述】:

我正在尝试将一个数组复制到另一个数组,但出现了该错误:

[Vue 警告]:渲染错误:“TypeError:无法读取属性‘名称’ 未定义”

我的代码:

props: {
    languages: {
        required: true,
    },
},
data() {
       return {
           translations: [],
       }
},
mounted() {
        this.setTranslations();
},
methods: {
        setTranslations() {
               this.translations = this.languages.slice(0);
        }
},

结果相同:

this.translations = this.languages

和:

let temp = this.languages.slice(0); 
this.translations = temp;

编辑

如果我评论那一行:

// this.translations = this.languages.slice(0);

错误消失。

这也不起作用:

this.languages.forEach( function (item) {
     this.translations.push(item);
});

我收到错误:

挂载钩子错误:“TypeError:无法读取属性‘翻译’ 未定义”

但这有效:

let temp = this.languages.slice(0);

temp.forEach( function ( lang ) {
    Vue.set(lang, 'value', {});
    Vue.set(lang.value, 'name', "");
    Vue.set(lang.value, 'metaKeywords', "");
    Vue.set(lang.value, 'metaDescription', "");
});

this.translations = temp;

虽然这样我的语言数组与翻译数组相同,但这不是我想要的。

我做错了什么?

【问题讨论】:

  • 你能添加你的html模板吗?接缝它尝试渲染 {{something.name}} 并且某些东西不存在。
  • 它不是来自模板,因为如果我评论那行: // this.translations = this.languages.slice(0);这个错误消失了。
  • @Lunfel 其实你是对的,问题出在模板上,因为它找不到“名称”。但是我不知道为什么当我尝试复制数组时会出现这个错误。如果我评论该行,“名称”也不存在。

标签: arrays vue.js copy


【解决方案1】:

其实这个错误来自于模板。模板取决于我的翻译数组中的“名称”。它找不到它。这就是我最后一个代码有效的原因。 我不知道为什么当我评论数组复制行时控制台不显示错误。它应该显示相同的错误。

【讨论】:

  • 如果使用 v-for,模板将不会为空数组渲染。但是,如果您有一个非空数组,其中的元素没有“名称”属性,则会触发该错误
猜你喜欢
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 2022-07-05
  • 2011-05-08
  • 2019-11-05
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
相关资源
最近更新 更多