Estoy usando angular 7 e intento hacer algo en un componente secundario: use la propiedad de entrada que puede estar en el primer nivel en el objeto o más profundo.
Mi componente hijo tiene este fragmento de código:
if (this.values.filter(obj => obj[this.matchPropertyName] === $event[i].id).length === 0) { ... }donde this.matchPropertyName es mi entrada (puede ser 'id', 'myProperty.id',...)
Para un solo nivel (obj.id) este código funciona. Sin embargo, a veces necesito usar desde un nivel más profundo (obj.myProperty.id) y no funciona. Cómo puedo conseguir esto ?
Déjame saber si no está lo suficientemente claro.
estoy usando angular 7 y mecanografiado 3.2.4
No creo que haya una solución integrada, pero puede utilizar una simple split y reduce . Por ejemplo:
const value = this.matchPropertyName.split('.').reduce((pre, curr) => pre[curr], obj); daría el valor para obj.myProperty.id cuando this.matchPropertyName="myProperty.id"
Entonces, en tu caso, podrías usarlo como:
const theValue = this.matchPropertyName.split('.').reduce((pre, curr) => pre[curr], obj); if (this.values.filter(obj => theValue === $event[i].id).length === 0) { ... }Resultado final por el OP:
myEventListener($event) { if (this.values.filter(obj => this.resolveProperty(obj) === $event[i].id).length === 0) { ... } } resolveProperty(obj) { return this.matchPropertyName.split('.').reduce((pre, curr) => pre[curr], obj); }