Options du fournisseur dynamique via la configuration de l'application AngularJS

J'ai des modules de fournisseur qui acceptent des configurations comme:

angular.module('app', ['search']). config(['$searchProvider', function($searchProvider) { $searchProvider.options({ resultLimit:50, defaultSort:'highToLow' }); }]); 

Il y aura une nouvelle instanciation d'application par client — donc je pense à l'utilisation d'un portail self-service client pour configurer l'objet meta .

Cela signifie que les modules du fournisseur doivent maintenant s'asseoir dans une méthode de rappel pour attendre la meta avant qu'ils puissent définir leurs configurations respectives.

Mais rappelons-nous: les blocs de configuration – sont exécutés pendant les enregistrements des fournisseurs et la phase de configuration. Seuls les fournisseurs et les constantes peuvent être injectés dans des blocs de configuration. Ceci consiste à empêcher une instanciation accidentelle de services avant qu'ils ne soient entièrement configurés …

… Donc, les docteurs disent que vous pouvez utiliser le fournisseur dans les blocs de configuration, mais je ne suis pas sûr de pouvoir les utiliser pour effectuer des appels de service. Parce que je n'ai aucune idée de comment gérer cela de la bonne façon, je vais vous montrer mon idée «de haut niveau»:

Enrouler les fournisseurs dépendants avec un autre rappel de fournisseur:

 angular.module('app', ['search','meta']). config(['$searchProvider','$metaProvider', function($searchProvider, $metaProvider) { $metaProvider.get(function(meta){ $searchProvider.options(meta); }); }]); 

Quelle est la meilleure façon de gérer cela?

J'ai récemment eu le même problème. Je n'ai pas pu trouver une solution pour travailler dans les limites du framework, donc j'ai travaillé autour du problème en démarrant manuellement angular après avoir chargé toutes les informations de configuration du client. http://docs.angularjs.org/api/angular.bootstrap

 $.get('/api/context', function () { // ... angular.bootstrap($('#container'), ['app']); });