2013-05-24 6 views
5

Wir versuchen herauszufinden, ob es eine Möglichkeit gibt, eine Reihe von Direktiven vorübergehend zu entfernen/ersetzen/zu überschreiben, während sie sich in einem "Vorschau" -Modus befinden.Entfernen Sie eine Direktive von Modul in Angular

Wir haben versucht, das Modul zu entfernen (n), dass die Richtlinien in enthalten sind, z.B .:

angular.module('myModule', []); 

aber die Richtlinien sind noch aktiv.

Kann jemand helfen?

Antwort

1

Als Alternative können Sie einen Vorschaumodus in jede der Anweisungen einfügen. Übergeben Sie ein Attribut, um anzugeben, ob der aktuelle Status eine Vorschau oder "live" ist, und konditionieren Sie die Direktivenvorlage mit ng-switch.

Die Geschmäcker variieren, aber das fühlt sich für mich eher an, als wenn ich die Richtlinien im Handumdrehen neu definiere.

+0

Leider haben wir viele Anweisungen und wir würden die Switch-Logik in allen wiederholen. Es würde sich sauberer anfühlen, alles an einem Ort zu erledigen. –

+0

Hmm. Verstanden. Wären Ihre alternativen (Vorschaumodus) Versionen statisch? Könnte dies erreicht werden, indem Spiele mit dem Ort der Richtlinienvorlagen gespielt werden? (Wie zum Beispiel, indem ich templateUrl in der Direktiven-Definition verwende und den Pfad dynamischer mache) –

+0

Ich kann sehen, wie diese Lösung funktionieren könnte, aber es fühlt sich viel mühsamer an, als nur die Direktiven wegzuspeichern und dann wieder zurückzubringen. –

5

Intern AngularJS schafft Fabriken von Richtlinien, durch ein Suffix der Richtlinie Namen hinzugefügt wird. Sie können also die Anweisungen deaktivieren, indem Sie die Fabriken durch noop Fabriken ersetzen.

var noopDirective = function() { return function() {}; }; 
if (previewMode) { 
    // Disable ngPaste directive 
    angular.module('myModule') 
     .factory('ngPasteDirective', noopDirective); 
} 

Stellen Sie sicher, dass dies der zuletzt ausgeführte Code ist.

+0

Dies deaktiviert jedoch die 'ngPaste'-Direktive als Ganzes, nicht nur die Direktive im 'myModule'-Modul. Zum Beispiel angenommen, dass ich auch eine 'ngPaste'-Direktive im 'mod2'-Modul definiere. Dann deaktiviert der obige Code nicht nur die 'ngPaste'-Direktive in' myModule ', sondern auch die 'ngPaste'-Direktive in' mod2'. Wie kann ich die 'ngPaste'-Direktive nur in einem Modul deaktivieren (und auch den Rest der Funktionalitäten behalten) und das in einem anderen behalten? Übrigens, die Anweisung, die ich deaktivieren möchte, ist in einer großen 3rd-Party-Bibliothek, von der ich keine modifizierte Version beibehalten möchte. – Rockallite