Angulaire 2 instancier la classe avec des valeurs vides
Comment instancier les membres de la classe avec des valeurs vides?
J'instancie avec
public members = new MemberClass();
mais la console affiche Membres: {} donc, je suis incapable de définir la valeur par défaut des valeurs vides
donc, fondamentalement, je suis en train de reproduire une structure vide comme:
this.members = [
{
"Name" : "", "Id" : "", "Team" : "",
"Cases" : {
"history" : []
}
}
];
Vous êtes à l'aide de l'interface de pas de classe
J'ai édité ma question afin de refléter la création de la classe
J'ai édité ma question afin de refléter la création de la classe
OriginalL'auteur Daniel S | 2017-05-04
Vous devez vous connecter pour publier un commentaire.
Utiliser des interfaces 😉 Et c'est une façon, vous pouvez créer un Tableau avec un objet vide de type
Member
avec des propriétés définies. Je ne sais pas du cas d'utilisation, à moins que je ne pas définir les propriétés des objets vides/les tableaux de modèles, mais nous y voilà 🙂Donc d'abord de vos interfaces, qui sont:
Ensuite, vous créez des 3 fonctions pour définir les propriétés:
Et maintenant dans votre partie, vous pouvez appeler la fonction
createMember
, qui appelle ensuite les deux autres fonctions:PS, selon vos modèles, le suivant n'est pas le modèle de
Member
-tableau, ils nom et de construire ne correspond pas, mais j'ai créé ci-dessus, basé sur les modèles que vous avez fournis.(SystemJS) Unexpected value 'AppComponent' declared by the module 'AppModule'. Please add a @Pipe/@Directive/@Component annotation.
lorsque j'utilise votre codeVoici une démo 🙂 plnkr.co/modifier/PJWqmeoZVHk2rubqZQVm?p=preview
Désolé si je suis pointilleux. Pourquoi les valeurs sont
undefined
au lieu de vider les valeurs de chaîne nécessaire dans la question d'origine?OriginalL'auteur AJT_82
Garder à l'esprit que vous êtes en utilisant des Interfaces de là, et non des classes. En caractères d'imprimerie, comme en Javascript, un objet vide est juste
{}
Alors, à faire ce que vous cherchez, essayez ceci:
let history: History = { Id:"", CaseNumber:""};
Si vous essayez de quitter l'autre de ces propriétés, vous recevrez un message d'erreur que vous en avez besoin. Si vous voulez propriétés d'une interface optionnelle lors de l'instanciation, la mise à jour de votre interface comme ceci:
CaseNumber?: string;
En savoir plus dans le manuel.
De préciser davantage: une classe est un type de béton que vous pouvez instancier et utiliser comme vous le feriez dans n'importe quelle langue. Si vous avez besoin d'un constructeur ou les valeurs par défaut sur vos propriétés, vous devez utiliser
export class MyType {}
.Cependant, dans mon expérience, j'ai trouvé des interfaces dans le fichier d'enregistrement pour être plus utile que de classes dans de nombreux cas. La raison pour cela est que vous pouvez code contre eux à dev-temps, mais ils ne sont pas inclus dans votre bundles lorsque vous expédiez (N. B. cela dépend ENTIÈREMENT de votre cas d'utilisation).
où dois-je utiliser
let history: History = { Id="", CaseNumber=""};
? dans le membre.classe.ts ?Je pense que vous êtes de se mêler un peu. Une classe est une définition concrète d'un type. Une interface est un plan ou un contrat. Est la raison pour laquelle vous devez créer une instance de la classe que vous avez besoin d'un constructeur? (
export class MyType
vsexport interface MyType
- la classe dispose d'un constructeur, alors que l'interface est une structure pour vous de code contre et pas un type statique)La syntaxe correcte est
let history: History = { Id:"", CaseNumber:""};
(ie. remplacer:
avec=
)j'ai ajouté
src/member.class.ts
(oublié d'avant)OriginalL'auteur aaron-bond