2012-09-15 3 views
6

내가 가지고있는 문제는 그리드에 바인딩하기 전에 loadjs 파일이 항상로드되지 않는다는 것입니다. 지시문 사용과 관련하여 다른 게시물을 읽었으나 필자는 이러한 지시문을 사용하는 방법을 이해하지 못합니다.각보기에 특정한 javascript 파일을 포함하는 방법 angularjs

차례로 각 뷰는 뷰가 마지막으로

그래서보기 1 datagrid.js 파일 의존성 및 뷰 2와 데이터 그리드 수 있습니다

을 renered 전에로드 할 필요가있는 특정 자바 스크립트 파일이 특정보기를로드해야합니다 코드 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

은 QUES을 위해 도움이되지 않음 컨트롤러에서 DOM에 액세스하면 안됩니다.이를 처리하기 위해 kendoGrid 지시문을 작성해야합니다. http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller (컨트롤러를 올바르게 사용하는 절) – Guillaume86

답변

3

당신은 할 수 없습니다. Angular는 템플릿에서 자바 스크립트 파트를로드하지 않습니다.

어쨌든 주 응용 프로그램에 포함 시키십시오. 주 앱이 시작되는 동안 모든 컨트롤러가로드되어야합니다.

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

을 참조하십시오. 동적으로 js 파일을 각 뷰에로드 할 수있는 대신 20 개의 뷰를 src = mygrid.js를 내 main.html 페이지에 하드 코딩해야합니까 ?? 나는 이것이 각각의 페이지가 그보기에 필요하지 않은 javascript를 가지기 때문에 오해를해야만한다. – dan

+0

javascript 파일을 동적으로로드하는 다른 방법이 있지만 각도가 아닙니다. 20 개의 뷰가있는 경우 컨트롤러 20 개에 해당하며 컨트롤러에 따라 큰 파일이 될 수 있지만 공유 된 메서드가있는 경우 http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller (섹션 컨트롤러 상속). 또는 필요에 따라 서비스를 만들 수 있습니다. –

+0

위의 예제에서는 파일을 헤더에 추가하지만 viewContentLoaded 이벤트를 사용하여 그리드에 바인딩하는 isloadjscssfile을 사용하여 동적으로 파일을로드하지만 그리드에는 바인딩되지 않습니다. 파일이로드됩니다. 내 코드에서 isloadjscssfile ("js/model/gridmodel.js", "js") 메서드를 배치해야하며 Bind 그리드 $ 그리드 코드를 어디에 배치해야합니까? viewcontentload는 이벤트가 올바르게 작동하기 위해 늦은 것 같습니다. 내가 바라는 곳은 view1 다음에 doc.ready loadfile 앞에 doc.ready가 그리드에 바인딩되어 있다고 가정합니다. – dan

2

(이것은 아마도 "더 각도"가 될 수 있지만, 순간 나를 위해 작동) 같은 것을보십시오 (이것은 당신이 당신 npApp 지시어를 넣어 곳이다) 지시어에,이

.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"> 
3

이 원하는 경우

+0

스크립트가 제 시간에로드되지 않고 컨트롤러가 액세스 할 수없는 경우 작동하지 않습니다. –

관련 문제