Pesquisa de site

arrays - Immutable.js com Angular 2


A maneira correta de usar immutable.js com Angular 2?

Meu aplicativo funciona, estou tentando otimizar e refatorar para obter desempenho do aplicativo. Eu encontrei o immutable.js e quero mudar meus dados que são recuperados de uma requisição HTTP para dados imutáveis e então chamá-los em um loop *ngFor do Angular.

Os dados retornam se eu fizer um console log, mas quando tento mapear os dados para um objeto imutável, obtenho um map de objeto, mas como faço para acessá-lo então. Eu vejo map->rout->entries->Array[]->Array[] meus dados estão no último elemento do array.

// component.ts
import { Component, OnInit} from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/map';
import { List, Map } from 'immutable'; 
import * as Immutable from 'immutable'; 

@Component({
  selector: 'app',
  templateUrl: './component.html',
  styleUrls: ['./component.css'],
})

export class MyComponent implements OnInit {

  let myData:any = null;
  constructor(private http: Http) {
    this.callData("test.json");
  }

  callData(targetUrl) {
      return this.http.get(targetUrl))
      .map((res) => res.json())
      .subscribe(
        (data) => {
         this.myData = [];
         this.myData = Immutable.Map(data);
         console.log(data); // RETURNS THE DATA
         console.log(this.myData); // RETURNS MAP
      });
  }
}
// component.html
   <div *ngIf="myData != null">
       <div *ngFor="let key of myData; let i = index">
          <div class="someClass">
             {{myData[key].something}}
          </div>
       </div>
  </div>

Resposta #1

Usando Immutable.js, você deve acessar objetos ou arrays imutáveis usando o método get.

No seu modelo, faça o seguinte: {{myData.get(key).something}}