我用几个锚点制作了一个Angular应用程序。每个锚点都会加载一个Angular控制器及其模板,加载的内容由$ routeProvider定义,这里是代码:
ApioApplication.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/home',{
templateUrl : 'systemApps/home/app.home.html',
controller : 'ApioHomeController',
reloadOnSearch: false
}).when('/home/:application',{
templateUrl : 'systemApps/home/app.home.html',
controller : 'ApioHomeController',
reloadOnSearch: false
}).when('/wall',{
templateUrl : 'systemApps/wall/app.wall.html',
controller : 'ApioWallController',
reloadOnSearch: false
}).when('/events',{
templateUrl : 'systemApps/events/app.events.html',
controller : 'ApioEventsController',
reloadOnSearch: false
}).otherwise({
redirectTo: '/home'
});
}]);
显然没有什么奇怪的,但是我已经看到每次点击一个锚时Angular会重新加载控制器,即使它之前已加载。
所以这是我的问题:是否有一种方法可以使用$ routeProvider或其他一些Angular功能来检查控制器是否已在运行以防止其重新加载?
答案 0 :(得分:1)
每次路由匹配时,该控制器实例都会运行 - 如果另一个路由具有相同的控制器则无关紧要。你肯定可以做一些不好的事情来防止同一个控制器运行,但在你的情况下它是完全没必要的,因为你可以只有一个路由和一个可选参数application
:
.when('/home/:application?', {...})
然后在控制器中你可以做到:
.controller("ApioHomeController", function($routeParams){
if ($routeParams.application){
//...
}
})