由于Vue的实现机制,删除对象的某个属性是无法被监听到的,$delete这个API就是设计出来解决这个问题的。

function del (target, key) {
  // 删除数组元素,走重载的变异方法
  if (Array.isArray(target) && typeof key === 'number') {
    target.splice(key, 1);
    return
  }
  var ob = (target ).__ob__;
  // 不能删除vue实例或者跟数据元素上的属性
  if (target._isVue || (ob && ob.vmCount)) {
    "development" !== 'production' && warn(
      'Avoid deleting properties on a Vue instance or its root $data ' +
      '- just set it to null.'
    );
    return
  }
  if (!hasOwn(target, key)) {
    return
  }

  // 对象的删除元素
  delete target[key];
  if (!ob) {
    return
  }

  // 通知watcher数据更新
  ob.dep.notify();
}

results matching ""

    No results matching ""