10
votes

Angular.js et NG-Switch-quand - Émoulement Enum

Je voulais introduire un peu d'enum à ma logique de contrôleur pour une sécurité de type, donc par exemple, j'ai créé quelque chose comme ceci: xxx

et dans mon exemple de page j'aurais quelque chose comme ceci: xxx

mais ng-commutateur-quand ne veut pas fonctionner. Cela ne fonctionne que si je substitue des valeurs dans ng-swith-quand manuellement avec des entiers, par exemple 1,2.

Voici des tripdles pour démontrer ceci:

http://jsfiddle.net/jnxye/3/

< un href = "http://jsfiddle.net/4jg7m/2/" rel = "nOfollow noreferrer"> http://jsfiddle.net/4jg7m/2/

maintenant, comme Vous pouvez voir, le premier ne fonctionne clairement pas, et la seconde fonctionne - ce qui signifie qu'il change le bouton lorsque le bouton est cliqué sur le bouton.

Le problème que je pense est ce var stinumum = objet.frez ({ "Connexion": 1, "Déconnexion": 2}) .

est possible d'utiliser mon énumé dans mon HTML de sorte ng-commutateur-quand fonctionnera correctement (comme dans le deuxième violon)?


0 commentaires

7 Réponses :


13
votes

Je pense que je créerais un service qui pourrait avoir tous vos énums: xxx pré>

Votre définition de l'application serait comme ceci: p> xxx pré>

Ensuite, vos contrôleurs que vous pouvez les injecter lorsque vous en avez besoin: p>

<div ng-include="'login'" ng-show='stateEnum.login==loginData' ...>


7 commentaires

Ok, mais le problème n'est pas comment je gère mes énums, même si le service est une bonne idée, la chose est que "la vue" - HTML semble ne pas fonctionner avec mon énumé - dans le premier violon, aucun cas n'est apparié.


Avez-vous des vues externes définies? Je veux dire où est login.html, le faire sur des fidèles est un peu difficile, je vous suggère d'utiliser plunkr.


Je n'ai aucune vue externe afaik, tout le HTML est dans la case HTML


Désolé ouais, doit être samedi.


@Andna Je pense que cela nécessite une chaîne afin que vous puissiez peut-être envisager de mettre un peu de ng-show / ng-cache sur les DIV qui incluent le NG-Inclure au lieu d'utiliser un commutateur.


C'est correct. NG-Switch-lorsqu'il attend une chaîne. Vous devez donc trouver une autre solution d'utilisation de la solution de contournement.


Oui, c'est vrai, j'ai échangé des chiffres à la représentation des chaînes de la clé et de fonctionnement, merci.



2
votes

Avez-vous regardé cette réponse sur Stackoverflow?: façons d'enum

Meilleure réponse est à partir de 2008, alors regardez les derniers postes pour indices. Comme je les lisons, vous pouvez obtenir la réponse comme une primitive dont vous avez besoin, mais je n'ai pas encore testé cela. Quelqu'un peut-il suggérer une meilleure réponse à utiliser avec angulaire de ce poste?


2 commentaires

C'était il y a quelque temps mais j'ai finalement fait quelque chose qui a été suggéré dans le poste que vous avez lié.


ADNA Je suis nouveau à JavaScript et les nombreuses suggestions dans ce poste submergé. Si vous avez révisé votre violon, ce serait génial pour un débutant de le regarder..heuvez-vous comme moi :-)



1
votes

Je suggérerais d'utiliser angulaire.module.Constant . Par exemple: xxx


0 commentaires

0
votes

J'ai déclaré des énormes dans un fichier séparé appelé Enums. (J'ai fait cela avec de cela avec le contrôleur de l'application angulaire, j'ai quelque chose comme ceci: xxx pré>

Les énumjets dans l'autre fichier sont dans un var appelé Enums. P>

Maintenant, vous pouvez l'utiliser et même être plus créatif: P>

ng-show="anotherVAr == enums.enumOne.VALUE"


0 commentaires

5
votes

Voici un exemple de monde réel de la façon d'imiter Enums en utilisant angular avec JavaScript standard et bootstrap. Il s'agit d'afficher les détails d'une commande également appelé billet.

Définissez vos énums sous forme de constantes angulaires: p> xxx pré>

Votre code de contrôleur devrait ressembler à ceci: P >

<table>
<tr ng-repeat="ticket in tickets" ng-class="{danger:ticket.CurrentStatus==enums.TicketStatus.Overring}">
<td>
<strong>{{ticket.TransNumber}}</strong>
</td>
<td>
{{enums.TicketStatusText[ticket.CurrentStatus]}}
</td>


0 commentaires

0
votes

service xxx

contrôleur xxx


0 commentaires

0
votes

NG-Switch-lorsqu'il ne supporte pas les expressions et nécessite une chaîne ou un numéro. Le transpilateur dossier peut créer un mappage inverse entre les chaînes et les nombres de manière à ce que l'Étatenum [1] = 'Login' dans votre cas (ou vous pouvez la créer vous-même avec une fonction utilitaire). Donc, vous pouvez simplement faire cela, ce qui est un peu moche mais propre.

<div ng-controller="LoginCheckCtrl">
   <div ng-switch on="stateEnum[loginData]"> 
      <div ng-switch-when="login" ng-include="'login'"></div>
      <div ng-switch-when="logout" ng-include="'logout'"></div>
   </div>
</div>


0 commentaires