Stehe gerade auf dem Schlauch.
Ich habe eine Directive welche im Grunde eine Zeitleiste bietet (Keine Chronik, sondern eine Zeitleiste wie im Videoschnitt). Dadurch lassen sich zu definierten Zeitpunkten diverse Elemente animieren. Der Aufbau sieht ungefähr so aus:
[CODE=JavaScript]angular.module(‚app‘).directive(‚timeline‘, [‚$compile‘, ‚$interval‘, function ($compile, $interval) {
return {
controller: function ($scope) {
this.play = function () {
$interval(update, 100);
}
this.play();
}
};
}])[/CODE]
Wie man sieht wird this.play() sofort beim init aufgerufen.
Ich möchte nun aber die Methode play (in weiterer Folge evtl. auch pause, stop etc) von Außen zugänglich machen.
Mit „von Außen“ meine ich konkret den darüberliegenden Controller.
Um noch genauer zu werden, ich habe im Controller einen Callback definiert, welcher ausgeführt wird, sobald alle Bilder geladen sind. Von dort aus möchte ich dann die Directive ‚starten‘.
Aus dem Code lässt sich nicht ableiten, dass die Direktive einen Parent-Controller besitzt
Falls die Direktive, wie im obigen Fall, keinen isolated Scope hat, kann sie Methoden vom Parent erben
Für die Kommunikation vom Child zum Parent würde sich ein $emit anbieten
$compile kannst du löschen und da this verwendet wird auch den $scope.
Mache es dir doch einfacher und verwende einen einfachen Controller, der an einen View und eine Route gebunden ist. Und vergiss nicht, bei Verwendung von this ein controllerAs hinzuzufügen.
Naja, ich möchte diese Directive in mehreren Projekten verwenden. Daher scheint mir ein einfacher Controller nicht die richtige Wahl?
Ich wollte es umgekehrt. Habe es nun via $broadcast und einem autoplay-Attribut gelöst.
Nicht wirklich schön aber ich musste jetzt kurzfristig eine Lösung finden.
Ja, danke, $compile war ein Überbleibsel aus div. Versuchen. $scope eigentlich auch, aber da ich jetzt $broadcast/$on verwende, benötige ich es doch wieder.
Custom Directives sind die AngularJS Version von Web Components. Gekapselte HTML/JS Elemente, die innerhalb des selben Projekts in mehreren Modulen verwendet aber je nach Parent-Controller mit unterschiedlichen Inhalten befüllt werden.