7
votes

Supprimer une directive du module en angulaire

Nous essayons de déterminer s'il existe un moyen de supprimer / remplacer / remplacer temporairement un ensemble de directives tout en mode 'Aperçu'.

Nous avons essayé de supprimer le (s) module (s) que les directives sont contenues, par exemple: xxx

mais les directives sont toujours actives.

Quelqu'un peut-il aider?


0 commentaires

3 Réponses :


1
votes

Autre alternative, envisagez de mettre un mode de prévisualisation dans chacune des directives. Passez un attribut pour indiquer si l'état actuel est un aperçu ou «Live» et conditionner le modèle de directive avec NG-Switch.

Les goûts varient, mais cela ressemble à une approche plus lisible pour moi que de redéfinir les directives à la volée.


4 commentaires

Malheureusement, nous avons beaucoup de directives et nous répéterons la logique du commutateur dans tous. Cela se sentirait plus propre de traiter tout cela au même endroit.


Hmm. Compris. Vos alternatives (mode de prévisualisation) seront statiques? Cela pourrait-il être accompli en jouant à des jeux avec l'emplacement des modèles de directive? (Tels que en utilisant templateurl dans la définition de la directive et en faisant le chemin dynamique)


Je peux voir comment cette solution pourrait fonctionner, mais cela ressemble à beaucoup plus d'efforts que de simples stabilisations, puis de les ramener ensuite.


Oui. Je ne sais pas comment accomplir l'autre, cependant, alors lancez des suggestions au cas où vous avez besoin d'une alternative. Pouvez-vous utiliser angular.Injector () pour modifier la liste d'injection dans le milieu du flux? Je n'ai jamais essayé.



8
votes

Angularjs interne crée usines des directives , en ajoutant un suffixe au nom de la directive. Donc, vous pouvez désactiver les directives en remplaçant les usines avec noop usines. xxx

Assurez-vous que ceci est le dernier code exécuté.


1 commentaires

Toutefois, cela désactive la directive ngpaste dans son ensemble, pas seulement la directive à l'intérieur MyModule Module. Par exemple, supposé que je définis aussi une directive ngpaste dans mod2 . Ensuite, le code ci-dessus désactivera non seulement ngpaste directive dans myModule , mais aussi la directive ngpaste dans mod2 . Comment puis-je désactiver uniquement la directive ngpaste dans un module (et conserver également le reste des fonctionnalités) et conserver celui-ci dans un autre? BTW, la directive que je veux désactiver est dans une grande bibliothèque 3ème partie, dont je ne veux pas maintenir une version modifiée.



1
votes

dans Cette réponse Il est décrit comment supprimer une directive intégrée angulaire. Sur la base de cette idée, ma suggestion est de faire cela:

angular.module('myModule', [])
  // ... registering some stuff on the module
  .config(['$provide', function ($provide) {
    // Remove the progress directive of 'ui.bootstrap'.
    // Otherwise we cannot use native progress bar.
    $provide.decorator('{DIRECTIVE_NAME}Directive', ['$delegate', function ($delegate) {
      $delegate.pop();
      return $delegate;
    }]);
  }]);


0 commentaires