2014-01-17 4 views
0

У меня есть angularjs веб-приложение с следующей маршрутизации:контроллер нагрузки порядка в angularjs

App.config(function($routeProvider) { 
    $routeProvider. 
     when('/', {templateUrl: 'Home.html', controller: HomeCtrl}). 
     when('/app/:app/model/:model', {templateUrl: 'detail.html', controller: ModelDetailCtrl}). 
}); 

Если пользователь ввел /app/some_app/model/some_model в начале, есть ModelDetailCtrl нагрузки, это правильно, но мне нужно, чтобы загрузить и выполнить HomeCtrl каждый раз перед тем ModelDetailCtrl как быть с ним?

спасибо.

+0

Вы должны выполнить фактическое HomeCtrl или вы можете просто просто выполнить метод HomeCtrl явно из метода ModelDetailCtrl? – Jason

+0

В HomeCtrl есть длинная задача, и она должна быть выполнена, и только ModelDetails должен запускаться – 0xAX

ответ

1

У меня была другая проблема, но мое решение может быть полезно и в вашем случае.

Что делать, если вы будете направлять всю вашу маршрутизацию на один контроллер (назовем его «RouteController»). В качестве шаблона используйте div с «ng-include», который будет загружать шаблон + контроллер для каждого «$ routeParams», который у вас есть, только после завершения вашей длинной задачи.

Это будет выглядеть примерно так:

$routeProvider.when('/', { 
     template: '<div ng-include src="templateUrl"></div>', 
     controller: 'RouteController' 
    }); 

    $routeProvider.when('/app/:app/model/:model', { 
     template: '<div ng-include src="templateUrl"></div>', 
     controller: 'RouteController' 
    }); 

Теперь, внутри «RouteController» вы можете сделать свой «HomeCtrl» длинную задачу и когда сделано добавить «$ scope.templateUrl» логику в соответствии с тем, что у вас есть внутри "$ routeProvider". В вашем случае, если пустые параметры «$ routeProvider» будет установлен в 'home.html и все другие на «detail.html»:

$scope.templateUrl = 'detail.html';//Or 'Home.html' if no $routeProvider params 

Единственное, чего не хватает, чтобы закрыть цикл настройки регулятора для каждого шаблона , внутри самого шаблона, как 'ng-controller'. Например, внутри «home.html» Использование:

<div ng-controller="HomeCtrl"></div> 

Я надеюсь, что мое решение является очевидным и может быть полезным в вашем случае ...

Смежные вопросы