控制器在angularjs中的加载顺序

时间:2014-01-17 19:12:15

标签: javascript angularjs

我有一个带有以下路由的angularjs web应用程序:

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如何使用它?

谢谢。

1 个答案:

答案 0 :(得分:1)

我有一个不同的问题,但我的解决方案也可能对您的情况有所帮助。

如果您将所有路由流量传输到单个控制器(让我们称之为'RouteController'),该怎么办?作为模板使用带有“ng-include”的div,它将为您拥有的每个“$ 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”长任务,完成后根据“$ routeProvider”中的内容添加“$ scope.templateUrl”逻辑。在您的情况下,空的'$ 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>

我希望我的解决方案很明确,对您的案例有帮助......