2012-09-15 8 views
6

Karşılaştığım sorun, loadjs dosyasının ağa bağlamadan önce her zaman yüklenmemesidir. Direktifleri kullanma ile ilgili diğer yazıları okudum ama durumumda bunları nasıl kullanacağımı anlamıyorum.javascript dosyasının her bir görünüm için özel angularjs içerisine nasıl ekleneceği

sırayla her view nihayet

Yani görünüm 1 datagrid.js dosya bağımlılığı ve view2 ile datagrid olabilir

renered önce yüklenmesi gerekiyor belirli bir javascript dosyası vardır belirli bir görünümü yükleyeceğini kodu listview.js dependancy ile bir liste görünümü

Teşekkürler.

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

sizin ques için yardımcı değil tion ama siz kontrolörlerinize DOM erişmemelisiniz, bunun için bir kendoGrid yönergesi yazmalısınız, bkz. http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller (Denetleyicileri Doğru Şekilde Kullanma) – Guillaume86

cevap

3

Yapamazsın. Açısal, javascript parçalarını şablondan yüklemez.

Yapmanız gereken şey, onları yine de ana uygulamanıza eklemektir. Ana uygulama başladığında tüm kontrolörler yüklenmelidir.

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(); 
    }); 

}]); 
+1

Her görünüm için bir js dosyasını dinamik olarak yüklemek yerine 20 görünüm, src = mygrid.js dosyasını main.html sayfamda sabitlemem gerekiyor ?? Her sayfa yükünün bu görünüm için gerekli olmayan javascript içermesine neden olabileceğinden yanlış anlaşılmalıyım. – dan

+0

Bir javascript dosyasını dinamik olarak yüklemek için başka yollar da vardır, ancak bu açısalın dışındadır. Eğer 20 görünümünüz varsa, 20 kontrol cihazına karşılık gelir, kontrol cihazına bağlı olarak büyük bir dosya olabilir, ancak eğer paylaştığınız yöntemler varsa http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller (Bölüm Denetimi Devralma) 'na bakın.). Ya da ihtiyaçlarınız doğrultusunda bir hizmet yaratabilirsiniz –

+0

Tamam, yukarıdaki örnekte, dosyayı başlığa ekleyen isloadjscssfile komutunu kullanarak dinamik olarak yüklüyorum ama ızgaraya bağlamak için viewContentLoaded olayını kullanıyorum ama bu garanti vermiyor dosya yüklenir. Kodumda, isloadjscssfile ("js/model/gridmodel.js", "js") yöntemini nereye yerleştirmeliyim ve Bind grid $ grid kodunu nereye yerleştirmeliyim. Görünüşe göre, bir yükün doğru bir şekilde çalışması için geç kalması gerekiyor. İhtiyacım olan şey, önce doc.ready loadfile dosyasından önce view1 sonra doc.ready grid'e bağlanırsa, – dan

2

(muhtemelen "daha Açısal" olabilir, ama şu an için benim için çalışır) Böyle bir şey deneyin (Bu, npApp direktifini koymak nerede) yönergede, bu

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

HTML gibi bir şey yapabilirsiniz:

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

Bunu isterseniz:

+0

adresine bağlanır. Bu işe yaramıyor, script zamanında yüklenmiyor ve denetleyici tarafından erişilebilir değil. –

İlgili konular