ich eine Richtlinie für meine Anwendung erstellt haben, die in der folgenden Frage How do you serve a file for download with AngularJS or Javascript? Richtlinie Code erwähnt wird, ist, wie wie unter
appModule.directive('fileDownload', function ($compile) {
var fd = {
restrict: 'A',
link: function (scope, iElement, iAttrs) {
scope.$on("downloadFile", function (e, url) {
var iFrame = iElement.find("iframe");
if (!(iFrame && iFrame.length > 0)) {
iFrame = $("<iframe style='position:fixed;display:none;top:-1px;left:-1px;'/>");
iElement.append(iFrame);
}
iFrame.attr("src", url);
});
}
};
return fd;
});
Hier Umfang. $ Auf wird verwendet, wenn ich dieses Ereignis über $ scope. $ emit oder $ scope. $ broadcast anrufe, funktioniert es nicht. Mein Controller-Code ist wie unten
function reportsController($scope, $http) {
var self = this;
$scope.$broadcast("downloadFile", 'http://google.com');
$scope.$emit("downloadFile", 'http://google.com');
}
und meine HTML-Datei ist als unten
<div ng-controller="reportsController" id="repctrl">
<a file-download></a>
</div>
Was ich hier falsch mache?
@Edit: Die subskribieren ($ on) in der Kompilierphase hinzugefügt, um die Verwendung von $ Timeout im Controller zu vermeiden. Here Sie das Beispiel aussehen kann
Warum machst du einen Controller auf dem zurückgegebenen fd-Objekt? – Nikos
fd ist der Rückgabewert des 2. Arguments der Direktivenfunktion, die nur die Anweisung config zurückgibt. Der '.controller' wird tatsächlich für den Rückgabewert von' .directive' aufgerufen, was eine Referenz auf das Modul ist, das ihn aufgerufen hat. –