2017-04-17 3 views
0

Ich habe folgende Architektur auf meine eckige Anwendung.Rufen Sie eine bestimmte Methode nur einmal auf Angular JS

Index Page -> Shell Seite -> Benutzeransicht (Von hier Benutzer können wir öffnen subview)

jeder Routenänderung auf meine Bewerbung geht durch Shell Seite. Auf der Shell-Seite habe ich eine Funktion namens activate, die nur aufgerufen werden sollte, wenn die Anwendung das erste Mal aufgerufen wird.

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

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

Da Chance Routing geht durch Shell Seite, aktivieren Methode selbst aufgerufen wird, wenn es auf die andere Ansicht von einer Ansicht bewegt sich. Ich möchte, dass die Methode activate nur beim ersten Mal aufgerufen wird, wenn die Anwendung geladen wird, nicht für Routenänderungen.

Wie bekomme ich das funktioniert? Vielen Dank.

Antwort

1

Sie sollten die Logik für die Methode activate in einen Dienst verschieben. Angular Services sind Singletons. Es wird also nur ein Objekt erstellt, das dorthin injiziert wird, wo es benötigt wird. Auf diese Weise können Sie im Laufe der Zeit einige einfache Zustände beibehalten. Der Einfachheit halber können sagen, dass Sie eine allgemeine Utility Service haben:

(function() { 
    'use strict'; 

    angular 
    .module('myApp') 
    .service('UtilityService', UtilityService); 

    function UtilityService() { 
    var shouldActivate = true; 

    this.activateComplete = function(){ 
     shouldActivate = false; 
    } 

    this.canActivate = function(){ 
     return shouldActivate; 
    } 
    } 
})(); 

Dann in der Shell-Controller würden Sie, dass UtilityService anrufen und canActivate, wenn Sie überprüfen, ob so wird es die activate Funktion ausführen und dann die completeActivate Funktion aufrufen, in der Dienstprogrammdienst. Jetzt geben alle nachfolgenden Prüfungen zu canActivate false zurück:

(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(); 
    } 
    } 
})(); 
+0

Das ist genau das, was ich suche. Vielen Dank. – Naga

+0

Gern geschehen. – Sasang

Verwandte Themen