Vue Keys 不会从 Object 中删除

Posted

技术标签:

【中文标题】Vue Keys 不会从 Object 中删除【英文标题】:Vue Keys do not delete from Object 【发布时间】:2020-07-21 16:22:32 【问题描述】:

我正在尝试从父组件中的对象中删除一个键。子组件向父方法发送一个事件(带有项目值),触发父数据对象中的删除。

父组件:

data() 
  return 
    savedNews: Object
  
,
methods: 
  containsKey(obj, key) 
    var result = Object.keys(obj).includes(key)
    return result
  ,
  handleSaveNews(item) 
    if (!this.containsKey(this.savedNews, item.url)) 
      this.savedNews = 
        [item.url]: item,
        ...this.savedNews
      
     else 
      console.log(this.containsKey(this.savedNews, item.url))
      var res = delete(this.savedNews, item.url)
      console.log(res)
      console.log(this.containsKey(this.savedNews, item.url))
    
  

最后一个 else 语句中的所有 console.logs 都返回 true。就是说删除成功了,但是key还在。如何删除此密钥?

【问题讨论】:

那个delete函数是从哪里来的? 您的数据不应将 savedNews 初始化为 Object 构造函数。相反,请尝试 savedNews: savedNews: Object.create(null) 我通过其他帖子找到了delete。据说这是一种 ES6 方法。不过,对我不起作用。 [***.com/questions/44954459/… 【参考方案1】:

来自the docs:

Vue 无法检测到属性添加或删除

使用this.$delete:

this.$delete(this.savedNews, item.url)

this.$set(也应该用于属性更改):

this.$set(this.savedNews, item.url, undefined);

额外信息:$ 是 Vue 用于每个组件实例上可用的内置方法的命名约定。也有一些插件选择遵循这种模式。例如,如果您 import Vue 并使用 Vue.delete,您也可以在其他模块中使用内置函数。您可以添加自己的方法,例如 Vue.prototype.$mymethod = ...

【讨论】:

谢谢!我对 Vue 还很陌生。 this.$<function_name>后面有什么用? $ 是什么意思? 不客气! $ 是 Vue 为其内置方法使用的命名约定,可在每个组件实例上使用。您可以添加自己的 Vue.prototype.$mymethod。也有一些插件选择遵循这种模式。例如,如果您 import Vue 并使用 Vue.delete,您也可以在其他模块中使用内置函数。我会将此信息复制到答案中。

以上是关于Vue Keys 不会从 Object 中删除的主要内容,如果未能解决你的问题,请参考以下文章

vue如何获取数组的中的第一个对象

销毁父组件时,UIkit 模态元素不会从 DOM 中删除(Vue.js)

如何从 React 组件的状态对象中删除属性

为啥它不会从集合中删除?

从代码中删除警报会强制其进入无限循环

js你不知的那些基础问题-对象