我有一个子组件,我必须从对象中删除属性。
通常使用Lodash它应该使用此代码:
this.current.obj = omit(this.current.obj, ['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent'])
只是current.obj模型没有挂载到父组件
但是,如果我只使用运算符delete
从对象中删除属性,那么它可以正常工作
delete this.current.obj.sellerSupportAgency
delete this.current.obj.sellerSupportWeb
delete this.current.obj.sellerSupportAgent
是否没有其他替代方法可以执行与删除相同的工作并省略?
我不知道它是否可以提供帮助,但是为了使用omit我正在调用子组件上的父对象(父组件)以便我接受它,但我正在寻找另一个解决方案current.obj
for (const [index] of this.current.parent.items.entries()) {
this.current.parent.items[index] = omit(this.current.parent.items[index], ['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent'])
}
答案 0 :(得分:1)
如果我理解正确,您希望修改组件与其父组件之间共享的对象。该对象位于父组件的数组中,因此我假设您使用的是ng-repeat
语句。我不确定,因为你没有分享你的组件定义,也没有分享父组件模板中的实例化。
更改本地对象引用(使用omit
)时,不会修改父组件中的数组。当您更改本地对象(使用delete)时,局部变量仍将引用父数组中的对象,并且它将在两个位置都被修改(因为它是同一个对象)。
简而言之,您必须在修改数组(在父级中)或从本地对象中删除字段之间进行选择(而delete
是唯一的方法)。前者更像角度,特别是如果您使用' -type类型的事件处理程序来告诉父组件您希望从对象中删除某些字段。然后你可以做这样的事情:
angular.component(...
bindings: {
filterObjectHandler: '&onFilterObject'
(...)
this.filterObjectHandler(['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent']);
或类似的东西。关于AngularJS 1.5+中的组件结构,有一组有趣的文章here。
但是,如果你只想要一种方法来删除涉及带有字段数组的单行的字段,你可以使用它:
var obj = this.current.obj;
['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent'].forEach(function(field) {
delete obj[field];
});
甚至:
['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent'].reduce(function(obj, field) {
delete obj[field];
return obj;
}, this.current.obj);