gpt4 book ai didi

javascript - 仅调用一次特定方法 Angular JS

转载 作者:行者123 更新时间:2023-12-03 04:31:53 26 4
gpt4 key购买 nike

我的 Angular 应用程序有以下架构。

索引页-->Shell页面-->用户 View (从这里用户可以打开 subview )

我的应用程序上的每个路由更改都会通过 Shell 页面。在 shell 页面上,我有一个名为 activate 的函数,仅当第一次调用应用程序时才应调用该函数。

//This function primarily displays a toaster saying the application is loaded.

function activate() {
logger.success(config.appTitle + ' loaded!', null);
}

由于路由机会通过 shell 页面,因此即使从一个 View 移动到另一个 View ,也会调用 activate 方法。我希望仅在第一次加载应用程序时调用 activate 方法,而不是为了更改路由。

我该如何让它发挥作用?谢谢。

最佳答案

您应该将激活方法的逻辑移至服务中。 Angular 服务是单例的。因此,只创建一个对象,该对象会被注入(inject)到需要的地方。通过这种方式,您可以随着时间的推移保留一些简单的状态。为简单起见,假设您有一个通用实用服务:

(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 Controller 中,您将调用该 UtilityService 并检查是否可以激活,如果可以,它将运行激活函数,然后调用 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();
}
}
})();

关于javascript - 仅调用一次特定方法 Angular JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43454513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com