2012-09-15 5 views
6

मेरी समस्या यह है कि लोडज फ़ाइल हमेशा ग्रिड से बांधने से पहले लोड नहीं होती है। मैंने निर्देशों का उपयोग करने के संबंध में अन्य पोस्ट पढ़ी हैं लेकिन मुझे नहीं पता कि मेरे मामले में उनका उपयोग कैसे किया जाए।प्रत्येक दृश्य को विशिष्ट जावास्क्रिप्ट फ़ाइल को कैसे शामिल करें angularjs

कोड एक विशेष दृश्य बदले में प्रत्येक दृश्य एक विशिष्ट जावास्क्रिप्ट फ़ाइल से पहले दृश्य अंत में

renered है

तो दृश्य 1 datagrid.js फ़ाइल dependancy और view2 साथ एक datagrid हो सकता है लोड करने की आवश्यकता है कि लोड करना चाहिए listview.js निर्भरता

धन्यवाद के साथ एक सूचीदृश्य है।

Function MyCtrl1($scope) { 
$scope.$on('$viewContentLoaded', function() { 

    //Load file if not already loaded 
    isloadjscssfile("js/model/gridmodel.js", "js") 


    $("#grid").kendoGrid({ 
        dataSource: getdatasource(), 
        pageable: true, 
        height: 400, 
        toolbar: ["create"], 
        columns: [ 
         "ProductName", 
         { field: "UnitPrice", title: "Unit Price", format: "{0:c}", width: "150px" }, 
         { field: "UnitsInStock", title:"Units In Stock", width: "150px" }, 
         { field: "Discontinued", width: "100px" }, 
         { command: ["edit", "destroy"], title: " ", width: "210px" }], 
        editable: "inline" 
       }); 
}); 

}

+2

अपने प्रश्न के लिए मदद कर रहा नहीं टयन लेकिन आपको अपने नियंत्रकों में डीओएम तक नहीं पहुंचना चाहिए, आपको इसे संभालने के लिए एक केंडोग्रिड निर्देश लिखना चाहिए, http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller (कंट्रोलर सही ढंग से अनुभाग का उपयोग करना) देखें – Guillaume86

उत्तर

3

आप नहीं कर सकते। कोणीय टेम्पलेट से जावास्क्रिप्ट भागों को लोड नहीं करता है।

आपको क्या करना चाहिए, उन्हें अपने मुख्य एप्लिकेशन में वैसे भी शामिल करना है। मुख्य ऐप शुरू होने पर सभी नियंत्रकों को लोड किया जाना चाहिए। (यह है जहाँ आप अपने npApp निर्देश डाल है)

+1

तो अगर मेरे पास है प्रत्येक दृश्य के लिए जेएस फ़ाइल को गतिशील रूप से लोड करने में सक्षम होने के बजाय 20 विचार मुझे अपने main.html पृष्ठ में src = mygrid.js को हार्डकोड करना होगा ?? मुझे गलतफहमी होनी चाहिए क्योंकि इससे प्रत्येक पृष्ठ को जावास्क्रिप्ट होना चाहिए जो उस दृश्य के लिए जरूरी नहीं है। – dan

+0

गतिशील रूप से जावास्क्रिप्ट फ़ाइल लोड करने के अन्य तरीके हैं लेकिन यह कोणीय के बाहर है। यदि आपके पास 20 विचार हैं, तो यह 20 नियंत्रकों के अनुरूप है, यह नियंत्रक के आधार पर एक बड़ी फ़ाइल हो सकती है लेकिन यदि आपने साझा विधियों को http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller (अनुभाग नियंत्रक विरासत) की जांच की है)। या आप अपनी जरूरतों के आधार पर एक सेवा बना सकते हैं –

+0

ठीक है तो उपर्युक्त उदाहरण में मैं isloadjscssfile का उपयोग करके फ़ाइल को गतिशील रूप से लोड कर रहा हूं जो फ़ाइल को हेडर में जोड़ता है लेकिन ग्रिड से जुड़ने के लिए दृश्य सामग्री लोडेड ईवेंट का उपयोग करके, लेकिन यह गारंटी नहीं देता है फ़ाइल लोड हो गई है। मेरे कोड में जहां मैं isloadjscssfile ("जेएस/मॉडल/ग्रिडमोडेल.जेएस", "जेएस") विधि रखूं और मुझे बाइंड ग्रिड $ ग्रिड कोड कहां रखना चाहिए। ऐसा लगता है कि viewcontentload एक घटना के देर से सही ढंग से काम करने के लिए है। मुझे जो चाहिए वह एक ऐसा स्थान है जो कहता है कि यदि 1 देखें तो doc.ready loadfile से पहले doc.ready पर ग्रिड – dan

2

कुछ इस तरह का प्रयास करें (यह शायद "अधिक कोणीय" हो सकता है, लेकिन इस समय के लिए यह मेरे लिए काम करता है):

angular.module('MyApp').controller('MyCtrl1', ['$scope', function ($scope) { 

    window.initialize = function() { 
     // code to execute after your JS file referenced in the loadScript function loads 
    } 

    var loadScript = function() { 
     var script = document.createElement('script'); 
     script.type = 'text/javascript'; 
     script.src = 'http://www.myserver.com/file.js?callback=initialize'; 
     document.body.appendChild(script); 
    } 

    $scope.$on('$viewContentLoaded', function() { 
     loadScript(); 
    }); 

}]); 
3

आप इस चाहते हैं निर्देश में, तो आप इस

.directive('require', function(){ 
    return{ 
     restrict: 'E', 
     scope: { 
     scriptSrc: '@' 
     }, 
     template:'<script type="text/javascript" src="{{ scriptSrc }}"></script>', 
     link: function(scope, elm, attr){ 
     .... 
     } 
     replace: true 
    } 
}); 

HTML की तरह कुछ कर सकते हैं:

<require script-src="/foo.js"> 
<require script-src="/bar.js"> 
+0

से बांधें यह काम नहीं करता है, स्क्रिप्ट समय पर लोड नहीं होती है और नियंत्रक द्वारा पहुंच योग्य नहीं है। –

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