la creación de clase como Iterable en angular / mecanografiado

votos
1

He creado una clase en angular, ahora, cuando voy a buscar un objeto mediante suscripción tienda, a pesar de que devuelve una matriz de objetos, pero no puedo usar el bucle foreach en el objeto devuelto.

Sí, he utilizado Object.keys (usuario) .forEach () {} .. Se está trabajando, pero quiero hacer lo mismo al hacer la clase Iterable. Cómo esto.

Código de muestra:-

class user {
    ...
}
ngOnInit(){
    storeSubsc = this.store.select('users').subscribe(user => {
        this.user = user;
    });
}

login(){
    Object.keys(this.user).forEach()... --> working fine
    I want it like
    this.user.forEach() {... }
}

Gracias por adelantado...

Publicado el 24/08/2018 a las 11:47
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
2

Para que su clase sea iterable, la clase debe tener un método de Symbol.iterator:

class User implements Iterable<string> {
    // ...
    constructor(private username: string, private password: string) { }

    *[Symbol.iterator](): Iterator<string> {
        for (let key of Object.keys(this)) {
            yield key;
        }
    }
}

const u = new User('blabla', '1234');
for (let k of u) {
    console.log(k);
}

En este caso he utilizado una función de generador.

Respondida el 24/08/2018 a las 12:16
fuente por usuario

votos
1

Se puede utilizar for inel operador:

class User {
  // 
}

const user = new User(/*args*/); 
for (let prop in user) {
  console.log(prop, user[prop]);
}

Además, se puede comprobar si la instancia de clase tiene el propcomo su propia propiedad user.hasOwnProperty(prop)dentro del for inbucle. Por ejemplo, si su Userclase extiende a otra clase base y sin comprobar hasOwnPropertyverá el constructorasí:

class BaseUser {
  constructor(public x, public y) { }
}

class User extends BaseUser {
  constructor(public a, public b, public x, public y) {
    super(x, y);
  }
}

const user = new User('12', 2, 111, 222); 
for (let prop in user) {
  alert(prop);
}

Verá cinco tipos de alertas: x, y, a, b, constructor.

Respondida el 24/08/2018 a las 12:10
fuente por usuario

votos
-1

Algo como esto ?

class User {
  constructor(public id: number, public name: string) {}

  iterate(callBack: Function) {
    return Object.keys(this).forEach(key => callBack(this[key]));
  }

}

const user = new User(1, 'Foo Bar');
user.iterate(item => console.log(item));
Respondida el 24/08/2018 a las 11:59
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more