2017-08-22 45 views
0

我有一個子組件,我必須從對象中刪除屬性。Angular 1/Javascript - 替代lodash省略和刪除運算符

通常使用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

爲什麼問題變成法語? – quirimmo

+0

它被修改。 –

+0

是嗎? '我們希望通過這種方式來解決這個問題,並且省略了父母的遺產(父母的合作伙伴),以及複雜的文化遺產,我們希望通過這樣的方式來解決這個問題。 current.obj' – quirimmo

回答

1

如果我理解正確,您想要修改組件與其父項之間共享的對象。該對象位於父組件的數組中,因此我假設您使用的是ng-repeat語句。我不確定,因爲您沒有共享組件定義,也沒有在父組件模板中實例化。

當您更改本地對象引用(使用omit)時,父組件中的數組將不會被修改。當您更改本地對象(使用delete)時,局部變量仍將引用父數組中的對象,並且它將在兩個位置(因爲它是相同的對象)進行修改。長話短說,您必須在修改數組(在父代中)或從本地對象中刪除字段(並且delete是唯一的方法來做到這一點)之間做出選擇。前者會更具角度,特別是如果您使用'&'類型的事件處理程序來告訴父組件,您希望將某些字段從對象中刪除。你可以這樣做:

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);