Ich versuche, Direktiven im laufenden Betrieb zu erstellen, eigentlich habe ich das erreicht, aber die Nähte sind ziemlich hackig.
Dies war mein erster Ansatz:
function create(myDir) {
angular.module("app").directive(myDir.name, function() {
return {
template:myDir.template
};
});
}
Es hat nicht funktioniert, da Sie nach dem Start der Anwendung keine Anweisungen registrieren können.
basierend auf diesem Beitrag: http://weblogs.thinktecture.com/pawel/2014/07/angularjs-dynamic-directives.html
Ich habe herausgefunden, dass ich compileProvider verwenden kann, um die Arbeit zu erledigen, aber da compileProvider außerhalb des Konfigurationsblocks nicht verfügbar ist, müssen Sie es löschen, also habe ich Folgendes getan:
var provider = {};
angular.module("app",[]);
angular.module('app')
.config(function ($compileProvider) {
//It feels hacky to me too.
angular.copy($compileProvider, provider);
});
....
function create(myDir) {
provider.directive.apply(null, [myDir.name, function () {
return { template: myDir.template } }]);
render(myDir); //This render a new instance of my new directive
}
Überraschenderweise hat es funktioniert. Aber ich kann nicht das Gefühl , dass sein Hacking den compileProvider , weil ich es bin nicht in der Art und Weise war es wohl zu sein, ich würde wirklich gerne wissen , ob es möglich , das verwenden compileProvider richtig , nachdem die Anwendung gestartet wird.
Es gibt eine Liste von Abhängigkeiten, die in config
Blöcke eingefügt werden können (diese sind integriert $provide
, $injector
und alle Dienstanbieter), und eine Liste von Abhängigkeiten, die in andere Bereiche eingefügt werden können (Dienstinstanzen und gute alte $injector
). Wie Sie sehen, constant
müssen Sie lediglich die Abhängigkeit zu beiden Listen hinzufügen .
Ein gängiges Rezept für die Verwendung von Anbietern außerhalb config
ist
app.config(function ($provide, $compileProvider) {
$provide.constant('$compileProvider', $compileProvider);
});
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen