2017-04-17 1 views
0

각도 응용 프로그램에서 다음 아키텍처를 사용합니다.한 번만 특정 메서드 호출 Angular JS

인덱스 페이지 -> 쉘 페이지 -> 사용자보기

내 응용 프로그램의 모든 경로 변경 쉘 페이지를 통해 간다 (여기에서 사용자 우리는 서브 뷰를 열 수 있습니다). 셸 페이지에는 응용 프로그램이 처음 호출 될 때 호출되어야하는 activate라는 함수가 있습니다.

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

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

라우팅 기회가 쉘 페이지를 통과하기 때문에 하나의보기에서 다른보기로 이동하는 경우에도 활성화 방법이 호출됩니다. 응용 프로그램이 경로 변경을 위해로드되지 않았을 때 정품 인증 메소드가 처음 실행되기를 원합니다.

어떻게 작동합니까? 감사.

답변

1

activate 메서드의 논리를 서비스로 옮겨야합니다. 각도 서비스는 싱글 톤입니다. 그래서 오직 하나의 객체 만 만들어져 필요한 곳에 주입됩니다. 이렇게하면 시간이 지남에 따라 간단한 상태를 유지할 수 있습니다. 그래서이 활성화 기능을 실행 한 다음에 completeActivate 함수를 호출 있을지

(function() { 
    'use strict'; 

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

    function UtilityService() { 
    var shouldActivate = true; 

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

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

그런 다음, canActivate을 쉘 컨트롤러는 UtilityService 있음을 부를 것이다하고 있는지 확인 : 단순 할 수 있습니다 당신은 일반적인 유틸리티 서비스를 말한다 UtilityService. 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(); 
    } 
    } 
})(); 
+0

그게 정확히 내가 원하는 것입니다. 고맙습니다. – Naga

+0

당신을 진심으로 환영합니다. – Sasang

관련 문제