我的角度应用程序中有以下架构。
索引页面 - >外壳页面 - >用户视图(从这里用户可以打开子视图)
我的应用程序上的每个路由更改都通过Shell页面进行。在shell页面上,我有一个名为activate的函数,只有在第一次调用应用程序时才应该调用它。
//This function primarily displays a toaster saying the application is loaded.
function activate() {
logger.success(config.appTitle + ' loaded!', null);
}
由于路由机会通过shell页面,因此即使从一个视图移动到另一个视图,也会调用activate方法。我想激活只在第一次加载应用程序时调用的方法而不是路由更改。
我如何让这个工作?感谢。
答案 0 :(得分:1)
您应该将activate方法的逻辑移动到服务。角度服务是单身人士。因此,只创建了一个对象,它被注入到需要的任何地方。这样,您可以随着时间的推移坚持一些简单的状态。为简单起见,我们假设您有一个通用的实用程序服务:
(function() {
'use strict';
angular
.module('myApp')
.service('UtilityService', UtilityService);
function UtilityService() {
var shouldActivate = true;
this.activateComplete = function(){
shouldActivate = false;
}
this.canActivate = function(){
return shouldActivate;
}
}
})();
然后在shell控制器中调用UtilityService并检查是否可以激活,如果是,它将运行activate函数,然后调用UtilityService中的completeActivate函数。现在对canActivate的任何后续检查都将返回false:
(function() {
'use strict';
angular
.module('myApp')
.controller('ShellController', ShellController);
/** @ngInject */
function ShellController(UtilityService) {
var vm = this;
vm.activate = activate() {
logger.success(config.appTitle + ' loaded!', null);
}
if(UtilityService.canActivate()){
vm.activate();
UtilityService.activateComplete();
}
}
})();