Angular 2 a declarar um conjunto de objectos
tenho a seguinte expressão:
public mySentences:Array<string> = [
{id: 1, text: 'Sentence 1'},
{id: 2, text: 'Sentence 2'},
{id: 3, text: 'Sentence 3'},
{id: 4, text: 'Sentenc4 '},
];
que não funciona porque a minha matriz não é do tipo string
, contém uma lista de objectos. Como posso delcare minha matriz para conter uma lista de objetos?
* sem um novo componente que declare a classe a Para sentença que parece um desperdício
4 answers
Para ser mais cauteloso, pode definir o seu type
como um conjunto de objectos que precisam de corresponder a uma determinada interface:
type MyArrayType = Array<{id: number, text: string}>;
const arr: MyArrayType = [
{id: 1, text: 'Sentence 1'},
{id: 2, text: 'Sentence 2'},
{id: 3, text: 'Sentence 3'},
{id: 4, text: 'Sentenc4 '},
];
Ou sintaxe curta sem definir um tipo personalizado:
const arr: Array<{id: number, text: string}> = [...];
public mySentences:Array<Object> = [
{id: 1, text: 'Sentence 1'},
{id: 2, text: 'Sentence 2'},
{id: 3, text: 'Sentence 3'},
{id: 4, text: 'Sentenc4 '},
];
Ou melhor...
export interface type{
id:number;
text:string;
}
public mySentences:type[] = [
{id: 1, text: 'Sentence 1'},
{id: 2, text: 'Sentence 2'},
{id: 3, text: 'Sentence 3'},
{id: 4, text: 'Sentenc4 '},
];
Outra abordagem que é especialmente útil se quiser armazenar dados provenientes de uma API externa ou de um DB seria esta:
-
Crie uma classe que represente o seu modelo de dados
export class Data{ private id:number; private text: string; constructor(id,text) { this.id = id; this.text = text; }
-
Na sua classe de componentes, cria um array vazio do tipo
Data
e preenche este array sempre que obtém uma resposta da API ou de qualquer fonte de dados que esteja a utilizarexport class AppComponent { private search_key: string; private dataList: Data[] = []; getWikiData() { this.httpService.getDataFromAPI() .subscribe(data => { this.parseData(data); }); } parseData(jsonData: string) { //considering you get your data in json arrays for (let i = 0; i < jsonData[1].length; i++) { const data = new WikiData(jsonData[1][i], jsonData[2][i]); this.wikiData.push(data); } } }
Primeiro, gerar uma Interface
Assumindo que estás a usar Tipescript & CLI Angular Você pode gerar um usando o seguinte comando
ng g interface car
Depois disso definir os tipos de propriedades
// car.interface.ts
export interface car {
id: number;
eco: boolean;
wheels: number;
name: string;
}
Pode agora importar a sua interface na classe que quiser.
import {car} from "app/interfaces/car.interface";
E actualizar a colecção/lista de objectos do carro, empurrando os itens para a lista.
this.car.push({
id: 12345,
eco: true,
wheels: 4,
name: 'Tesla Model S',
});
Mais nas interfaces:
Interface é um artefato Tipográfico, não faz parte do ECMAScript. Uma interface é uma forma de definir um contrato sobre uma função em relação aos argumentos e seu tipo. Junto com funções, uma interface também pode ser usada com uma classe, bem como para definir tipos personalizados. Uma interface é um tipo abstrato, não contém nenhum código como uma classe. Define apenas a "assinatura" ou a forma de uma API. Durante a transpilação, uma interface não irá gerar nenhum código, é apenas usado por Typescript para verificação do tipo durante o desenvolvimento. - https://angular-2-training-book.rangle.io/handout/features/interfaces.html