我有一个带有以下路由的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
如何使用它?
谢谢。
答案 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>
我希望我的解决方案很明确,对您的案例有帮助......