crearea clasei ca Iterable unghiulare / dactilografiat

voturi
1

Am creat o clasă în unghiulară, acum, când am preluat un obiect prin abonament magazin, deși returnează o matrice de obiect, dar nu pot folosi bucla foreach pe obiectul returnat.

Da, am folosit Object.keys (utilizator) .forEach () {..} Acesta este de lucru, dar vreau să fac același lucru prin a face clasa Iterable. Cum acest lucru.

Cod simplu:-

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() {... }
}

Mulțumesc anticipat...

Întrebat 24/08/2018 la 11:47
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
2

Pentru clasa sa fie iterable, clasa ta trebuie să aibă o metodă 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);
}

În acest caz, am folosit un generator de funcție.

Publicat 24/08/2018 la 12:16
sursa de către utilizator

voturi
1

Puteți utiliza for inoperatorul:

class User {
  // 
}

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

În plus, puteți verifica dacă instanța de clasă are propca propria proprietate în user.hasOwnProperty(prop)interiorul for inbuclei. De exemplu, în cazul în care dvs. de Userclasă extinde o altă clasă de bază și fără a verifica hasOwnPropertyveți vedea constructor, de asemenea:

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

Vei vedea cinci alerte: x, y, a, b, constructor.

Publicat 24/08/2018 la 12:10
sursa de către utilizator

voturi
-1

Ceva de genul ?

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));
Publicat 24/08/2018 la 11:59
sursa de către utilizator

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