2017-08-22 1 views
0

J'ai un composant enfant où je dois supprimer les propriétés d'un objet.Angular 1/Javascript - alternative à lodash omettre et supprimer opérateur

Normalement, en utilisant Lodash il devrait fonctionner avec ce code:

this.current.obj = omit(this.current.obj, ['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent']) 

Juste que le modèle current.obj ne monte pas au composant parent

Mais si je supprime les propriétés de l'objet avec juste l'opérateur delete cela fonctionne

delete this.current.obj.sellerSupportAgency 
    delete this.current.obj.sellerSupportWeb 
    delete this.current.obj.sellerSupportAgent 

est-il pas une autre alternative qui fait le même travail que supprimer et omettre? Je ne sais pas si cela peut aider, mais pour que ça marche, j'appelle l'objet parent (composant parent) sur le composant enfant pour que je puisse y entrer, mais je cherche une autre solution depuis le 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

pourquoi la question devient française? – quirimmo

+0

il est modifié. –

+0

Est-ce? «Je ne sais pas si ça peut aider, mais pour que fonctionne avec omit je fais appel à l'objet parent (parent application) sur le composant fils pour que j'itère sur lui, mais je cherche une autre solution depuis le current.obj' – quirimmo

Répondre

1

Si je comprends bien, vous voulez modifier l'objet qui est partagé entre le composant et son parent. L'objet est dans un tableau dans le composant parent, donc je suppose que vous utilisez une instruction ng-repeat. Je ne suis pas sûr, parce que vous n'avez pas partagé votre définition de composant ni l'instanciation dans le modèle de composant parent.

Lorsque vous modifiez la référence d'objet local (avec omit), le tableau du composant parent ne sera pas modifié. Lorsque vous modifiez l'objet local en place (avec suppression), la variable locale référencera toujours l'objet dans le tableau parent et elle sera modifiée aux deux endroits (puisqu'il s'agit du même objet). En bref, vous devez choisir entre modifier le tableau (dans le parent) ou supprimer les champs de l'objet local (et delete est le seul moyen de le faire). Le premier serait plus angulaire, surtout si vous utilisez des gestionnaires d'événements de type '&' pour dire au composant parent que vous voulez que certains champs soient supprimés de l'objet. Vous pourriez alors faire quelque chose comme ceci:

angular.component(... 
    bindings: { 
     filterObjectHandler: '&onFilterObject' 
(...) 

this.filterObjectHandler(['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent']); 

Ou quelque chose comme ça. Il y a un ensemble intéressant d'articles here sur la structure des composants dans AngularJS 1.5+.

Cependant, si vous voulez juste un moyen de supprimer les champs d'une manière impliquant une seule ligne avec un tableau de champs, vous pouvez utiliser ceci:

var obj = this.current.obj; 

['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent'].forEach(function(field) { 
    delete obj[field]; 
}); 

ou même:

['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent'].reduce(function(obj, field) { 
    delete obj[field]; 
    return obj; 
}, this.current.obj);