Tôi đã tạo ra một chỉ thị cho ứng dụng của tôi được đề cập trong những điều sau câu hỏi How do you serve a file for download with AngularJS or Javascript? đang Chỉ là như như dưới đây
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;
});
đây phạm vi. $ Trên được sử dụng, khi tôi gọi sự kiện này qua phạm vi $. $ emit hoặc $ scope. $ broadcast, nó không hoạt động. mã điều khiển của tôi là như dưới đây
function reportsController($scope, $http) {
var self = this;
$scope.$broadcast("downloadFile", 'http://google.com');
$scope.$emit("downloadFile", 'http://google.com');
}
và file html của tôi là như sau
<div ng-controller="reportsController" id="repctrl">
<a file-download></a>
</div>
Những gì tôi đang làm sai ở đây?
@Edit: Đã thêm đăng ký ($ on) trong giai đoạn biên dịch để tránh việc sử dụng $ timeout trong bộ điều khiển. Here bạn có thể xem ví dụ
tại sao bạn đang thực hiện một .controller trên đối tượng fd được trả về của bạn? – Nikos
fd là giá trị trả về của đối số thứ 2 của hàm chỉ thị, mà chỉ trả về cấu hình chỉ thị. '.controller' thực sự được gọi trên giá trị trả về của' .directive', là tham chiếu đến mô-đun gọi là nó. –