Vue.delete( target, propertyName/index )
参数:
{Object | Array} target
{string | number} propertyName/index
如果要删除的是对象上的属性:
首先,Vue.delete
会在内部调用Object.defineProperty
方法,将要删除的属性的值设置为undefined
,并将其配置为不可枚举。
接着,Vue会触发响应式系统的侦测机制,通知相关观察者(如Vue实例、组件)该属性的变更。
当下次访问该属性时,由于其值被设置为undefined
且不可枚举,将返回undefined
。
如果要删除的是数组中的元素:
Vue.delete
会向数组中添加一个undefined
元素,并将其配置为不可枚举。
然后,Vue会触发响应式系统的侦测机制,通知相关观察者该数组的变更。
在下一次访问该数组时,被删除的元素将被视为undefined
且不可枚举的。
总的来说,Vue.delete
通过改变对象或数组的属性或元素,来实现删除操作。通过通知响应式系统的侦测机制,使得Vue可以在相关观察者中更新视图,从而保证了数据和视图的同步。
function del(target, key) {if (isUndef(target) || isPrimitive(target)) {warn("Cannot delete reactive property on undefined, null, or primitive value: " +target);}if (Array.isArray(target) && isValidArrayIndex(key)) {target.splice(key, 1);return;}var ob = target.__ob__;if (target._isVue || (ob && ob.vmCount)) {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;}ob.dep.notify();
}