2013-03-01 4 views
11

AngularJS와 RequireJS를 함께 사용하려고합니다. $routeProvider 서비스를 사용하고 응용 프로그램 시작시 내보기에 대한 모든 컨트롤러를로드하지 않아도됩니다. 이를 위해 다음을 시도했습니다.필요에 따라 AngularJS 라우팅 및 요청 컨트롤러 사용

define(['require', 'angular', 'appModule'], function (require, angular, app) { 
    app.config(['$routeProvider', function($routeProvider) { 
     $routeProvider 
      .when('/sites', {templateUrl: '/Site/GetSitesView', controller: function() { 
      require(['sitesController'], function(SitesController) { 
       return new SitesController(); 
      }) 
     }}) 
    }]); 
}); 

불행히도, 저를 위해 작동하지 않았습니다. 오류가 없습니다. 컨트롤러가 들어있는 JS 파일이 제대로로드되고 있지만 렌더링 된 뷰에서 데이터 바운드 값을 볼 수 없습니다. 나는 (JS 파일을로드하기 위해) 비동기 호출을 기다리는 다른 방법으로 controller 값을 할당 할 수 있는지 궁금합니다.

아이디어가 있으십니까?

+5

이렇게하는 유일한 방법은 $ controllerProvider를 확보하는 것입니다. 나는 여기서 일하는 해결책을 가지고있다 : https://github.com/matys84pl/angularjs-requirejs-lazy-controllers – matys84pl

+0

@ matys84pl 그것은 실제로 내가하고 싶은 생각의 선을 따른다. 이것을 공유해 주셔서 감사합니다. 한 가지 있지만, 코드를 살펴본 결과, 텍스트 필요 플러그 인을 사용하여 템플릿을로드하는 것을 보았습니다. 라이브러리를 사용하여 템플릿을로드하는 유일한 지원 방법입니까? 서버의 URL에서 템플릿을로드하려면 어떻게해야합니까? – Kassem

+0

URL이 앱과 관련이 있는지에 따라 달라집니다. 즉, 동일한 도메인에 있습니까? 그렇지 않다면 나는 (다른 도메인에서 파일을로드하기 위해) 어떤 종류의 프록시를 사용해야한다고 생각한다. – matys84pl

답변

4

당신은 해결책 당신은 각 경로에 resolve 속성을 정의하고 그것을 약속을 반환하는 함수를 할당해야 here

을 찾을 수 있습니다. 이 함수는 대상 컨트롤러가 포함 된 스크립트를 동적으로로드하고로드가 완료되면 약속을 해결할 수 있습니다. 이 article에서 Dan Wahlin은보다 실질적인 라우팅을 위해 컨벤션 오버 규칙을 사용하는 방법을 보여줍니다.

+0

게시물을 가져 주셔서 감사합니다. 많이 도와 줬어! – VishwaKumar

관련 문제