我制作了一个带有多个 anchor 的 Angular 应用程序。每个 anchor 都会使用其模板加载 Angular Controller ,加载内容由 $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'
});
}]);
显然没有什么奇怪的,但我发现每次我点击 anchor 时 Angular 都会重新加载 Controller ,即使它之前已经加载过。
所以这是我的问题:有没有办法使用 $routeProvider 或其他一些 Angular 功能来检查 Controller 是否已经在运行以防止其重新加载?
最佳答案
每次路由匹配时,该 Controller 实例都会运行 - 另一个路由是否具有相同的 Controller 并不重要。您绝对可以做一些奇怪的事情来阻止同一个 Controller 运行,但在您的情况下,这是完全没有必要的,因为您可以只有一个路由和一个可选参数application
:
.when('/home/:application?', {...})
然后在 Controller 中你可以这样做:
.controller("ApioHomeController", function($routeParams){
if ($routeParams.application){
//...
}
})
关于javascript - Angular - 如果 Controller 已在运行,则防止重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30383933/