2013-12-17 11 views
9

मैं अपने आवेदन जो निम्नलिखित प्रश्न 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; 
    }); 

यहाँ गुंजाइश है। $ पर नीचे का उपयोग किया जाता है, जब मैं इस घटना को $ स्कोप के माध्यम से कॉल करता हूं। $ emit या $ scope। $ प्रसारण, यह काम नहीं कर रहा है। मेरे नियंत्रक कोड

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> 

नीचे के रूप में मैं गलत यहाँ क्या कर रहा हूँ?

@ एडिट: संकलन चरण में सब्सक्राइब ($ ऑन) जोड़ा गया ताकि नियंत्रक में $ टाइमआउट के उपयोग से बच सके। Here आप उदाहरण

उत्तर

7

देख सकते हैं मैं अपने नियंत्रक अपने निर्देश से पहले प्रारंभ किया जा रहा है लगता है .. तो $emit के बाद सुन $on शुरू होता है, $broadcast पहले से ही हुआ है।

controller init happened script.js:16 
link happened script.js:7 
$scope.test() happened script.js:21 
scope.$on happened script.js:9 
scope.$on happened 

आप ng-view साथ नियंत्रक को प्रारंभ या फेंकना करते हैं/प्रसारण के बाद निर्देश बनाई गई है:

इस plunker

कंसोल खोलें और आप देख सकते हैं जब console.logs हो देखना , यह काम करना चाहिए। समान

+0

आप अपने लौटे हुए एफडी ऑब्जेक्ट पर .controller क्यों कर रहे हैं? – Nikos

+0

fd निर्देश फ़ंक्शन के दूसरे तर्क का वापसी मान है, जो केवल निर्देश कॉन्फ़िगरेशन को वापस कर रहा है। '.controller' वास्तव में'। डायरेक्टिव 'के रिटर्न वैल्यू पर कॉल किया जा रहा है, जो मॉड्यूल का संदर्भ है जिसे इसे कहा जाता है। –

1

कुछ मेरा क्या जब मैं एक मॉडल के निर्देश में एक समारोह कॉल करने के लिए प्रयास करते हैं,

मुझे क्या करना था एक देरी बनाने के लिए था के बाद मैं मोडल दिखाने के लिए फोन किया:

 $timeout(function() { 
      $rootScope.$broadcast('obtiene-plantillas'); 
     }, 500); 
+0

यहां हमें $ टाइमआउट के लिए दूसरी तर्क के रूप में समय देने की आवश्यकता नहीं है। मैंने अपना प्रश्न संपादित किया है और [fiddle] (https://jsfiddle.net/esy4kLm2/5/) में समाधान के रूप में अपनी नवीनतम खोज को जोड़ा है – Kanagu

संबंधित मुद्दे