2013-06-17 4 views
0

как вы загрузите контроллер, который загружается асинхронно через require.js? если у меня есть что-то вроде этого:асинхронный код контроллера нагрузки

$routeProvider.when('/', 
    { 
    templateUrl:'view1.html', 
    controller:'ctrl', 
    resolve:{ 
     load:function($q){ 
     var dfrd = $q.defer(); 
     require(['view1-script'],function(){ 
      dfrd.resolve(); 
     }) 
     return dfrd.promise; 
     } 
    } 
}) 

почему Угловое еще не найти контроллер? Я решение маршрута после того, как он загружает скрипт

check out this plunkr

ответ

1

попробуйте позвонить $controllerProvider.register создать свой контроллер. Я хотел бы также назвать $apply() на $rootScope после разрешения отсроченной, потому что без него, взгляд, кажется, не появляются:

load: function($q, $rootScope){ 
    var dfrd = $q.defer(); 
    require(['view1'],function(){ 
    dfrd.resolve(); 
    $rootScope.$apply(); 
    }) 
    return dfrd.promise; 
} 

http://plnkr.co/edit/fe2Q3BhxPYnPmeiOORHP

кроме того, здесь хороший пост: http://weblogs.asp.net/dwahlin/archive/2013/05/22/dynamically-loading-controllers-and-views-with-angularjs-and-requirejs.aspx

-1

Прошло уже три года, но на всякий случай кого-то еще интересует, несколько месяцев назад я написал a post about a similar technique, чтобы сделать это.

Наиболее важной частью является то, что второй параметр метода метод $routeProvider.when(route, ctrl) может обрабатывать обещания, так что вы можете просто эмулировать:

function controllerFactory(ctrl) { 
    return { 
    then: function (done) { 
     var self = this; 

     require(['./controller/' + ctrl], function (ctrl) { 
     self.controller = ctrl; 
     self.resolve  = ctrl.resolve; 
     self.templateUrl = ctrl.templateUrl; 

     done(); 
     }); 
    } 
    }; 
} 

И вы можете закончить написание определение маршрута, как это:

$routeProvider. 
    when('/some/route', controllerFactory('some/route')). 
    when('/other/route', controllerFactory('other/route')) 
Смежные вопросы