2017-04-05 3 views
0

Utilisation de mean.js:Routeur angulaire - Utilisation de l'état abstrait pour accéder au service

J'ai une grande application divisée par, par exemple, offices. Chaque bureau accède à la même application de la même manière, mais les employés d'un bureau peuvent uniquement accéder aux informations relatives à ce bureau. Les administrateurs de la société peuvent accéder à l'application intégralement, en basculant d'un contexte de bureau à l'autre. La mise en garde est qu'il n'y a aucun compte d'utilisateur (aucun login/auth) pour des employés de bureau, seulement des comptes d'admin pour les administrateurs.

J'explore le faire de la manière suivante:

J'ai créé un module d'accès à un service qui stocke le contexte de bureau, en passant au back-end lors des appels API. Ceci est défini au démarrage de l'application à partir des fichiers de configuration.

Ceci est bien beau, mais je dois permettre aux administrateurs de changer de contextes de bureau. J'utilise un lien <a ui-sref="Context({ officeID: 'x' }) (dans le menu déroulant navbar, donc accessible à partir chaque État) pour accéder au routeur angulaire:

.state('Context', { 
     url: '/Context/:officeID', 
     controller: 'ContextController', 
     controllerAs: 'vm' 
     }); 

Cela passe le OfficeID au ContextController, qui fixerait la variable ContextService.officeID. À ce moment, je crois que je ferais un appel api à partir du ContextController pour actualiser les données de l'état actuel pour refléter le contexte actuel. Je ne sais pas comment faire ça.

je sens que j'ai quelques options ici, que je ne suis pas sûr comment mettre en œuvre:

  • Je peux faire l'état Context abstrait, et tout autre état d'un enfant, mais qui semble encombrant. Si c'est correct, comment puis-je dire à l'état actuel de rafraîchir ses données?
  • je pourrais entrer dans l'état Context, réglez le ContextService.officeID, et rediriger immédiatement à l'état précédent, qui à l'entrée, devrait faire un appel à l'aide api le nouveau contexte. Si c'est correct, comment puis-je correctement effectuer cette redirection?

Je pourrais laisser tomber comment cela se fait entièrement, mais je ne sais pas par où commencer. Tout conseil est le bienvenu.

+1

La question est de savoir comment réagir à un changement d'itinéraire? – Yiou

Répondre

0

J'ai découvert quelque chose qui se sent un peu plus élégant.

-je encore utiliser la route Context. J'ai inclus le ContextService dans tous mes modules angulaires et je l'appelle lorsque le contexte doit être défini. J'ai essayé de rediriger l'aide $location.path(...), qui était un véritable casse-tête. En utilisant $state.go($state.previous.state.name) fonctionne un régal.

Mieux encore, si vous utilisez des itinéraires qui dépendent de résolutions, vous pouvez continuer à rediriger l'aide $state.go($state.previous.state.name, $stateParams);