仅在Angular JS中调用一个特定的方法

时间:2017-04-17 15:32:38

标签: javascript angularjs angularjs-ng-route

我的角度应用程序中有以下架构。

索引页面 - >外壳页面 - >用户视图(从这里用户可以打开子视图)

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

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

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

由于路由机会通过shell页面,因此即使从一个视图移动到另一个视图,也会调用activate方法。我想激活只在第一次加载应用程序时调用的方法而不是路由更改。

我如何让这个工作?感谢。

1 个答案:

答案 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();
    }
  }
})();