Я создал директиву для моего приложения, которое упоминается в следующем вопросе How do you serve a file for download with AngularJS or Javascript? Директивы кода, как, как показано ниже
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;
});
Здесь сфера. $ На используется, когда я вызываю это событие через $ scope. $ emit или $ scope. $ broadcast, он не работает. Мой код контроллера, как показано ниже
function reportsController($scope, $http) {
var self = this;
$scope.$broadcast("downloadFile", 'http://google.com');
$scope.$emit("downloadFile", 'http://google.com');
}
и мой HTML-файл, как показано ниже
<div ng-controller="reportsController" id="repctrl">
<a file-download></a>
</div>
Что я делаю неправильно здесь?
@Edit: добавлена подписка ($ on) на этапе компиляции, чтобы избежать использования $ timeout в контроллере. Here вы можете посмотреть пример
Почему вы делаете .controller на возвращаемом объекте fd? – Nikos
fd - это возвращаемое значение второго аргумента директивной функции, которая просто возвращает директиву config. '.controller' на самом деле вызывается на возвращаемое значение' .directive', которое является ссылкой на модуль, который его вызвал. –