javascript - Vue props 变成 null 了?

标签 javascript vue.js

我的 vue.js 应用程序中有这个组件:

export default {
    props: ['forums'],

    methods: {
        increment(forum, index) {
            ForumService.increment(forum)
                .then(() => {
                    this.forums.splice(index -1, 2, this.forums[index], this.forums[index -1]);
                });
        },
    }
}

但是当我尝试增加时:

<i class="material-icons" @click="increment(forum)">&#xE316;</i>

prop forums 变为 null(我可以在我的 vue devtools 中看到这一点)。我该如何解决这个问题?

最佳答案

我无法确切地告诉你在做什么,但你需要在本地复制你的 prop ,这可以在 created 钩子(Hook)内完成,然后您可以使用局部变量来代替:

export default {
 props: ['forums'],
  created() {
    this.localForums = this.forums;  // Copy prop to local variable
  },
  methods: {
    increment(forum, index) {
      ForumService.increment(forum)
        .then(() => {
          this.localForums.splice(index - 1, 2, this.localForums[index], this.localForums[index - 1]);
        });
    },
  },
  data() {
    return {
      localForums: []
    }
  }
}

然后您可以像这样调用您的方法:

<i class="material-icons" @click="increment(forum, 1)">&#xE316;</i>

我创建了一个 JSFiddle 来向您展示其工作原理,显然我不知道 ForumService.increment(forum) 的作用(或者 forum 是什么),所以我只是 mock 了它并返回了一个 promise 以表明您没有遇到任何范围问题:

https://jsfiddle.net/wu6ad78m/

关于javascript - Vue props 变成 null 了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41933523/

相关文章:

macos - 关闭 Electron 应用程序时如何本地显示“保存更改”对话框?

javascript - Vue CLI - 将构建输出合并到单个 html 文件

javascript - 如何将事件传递给 LitElement 中的子级

javascript - 重新加载时 HTML5 本地存储不起作用

javascript - 如何创建表格并在单击按钮时插入此标签和文本字段

javascript - 如何防止下面的vue watch触发死循环?

c# - VS2022 VueJs 独立模板 TS 错误

javascript - 无法使 vue.js element-ui 对话框在子组件内工作

javascript - 无法成功检测复选框上的单击或更改事件

javascript - 我无法将事件绑定(bind)到元素