/ / Извиквайте конкретни методи само веднъж Angular JS - javascript, angularjs, angularjs-ng-route

Извиквайте конкретни методи само веднъж Angular JS - javascript, angularjs, angularjs-ng-route

Имам следната архитектура на моето ъглово приложение.

Страница на индекса -> Страница на черупката -> Потребителски изглед (Оттук Потребителят може ли да отвори подпреглед)

всяка промяна на маршрута в моето приложение преминава през страницата Shell. На страницата на черупката имам функция, наречена активиране, която трябва да бъде извикана само когато приложението е извикано за първи път.

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

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

Тъй като шансът за маршрутизация минава през страница на черупката,активира се метод, дори когато се премества от един изглед в другия изглед. Бих искал методът за активиране да бъде извикан само за първи път, когато приложението се зарежда, а не за промени в маршрута.

Как да накарам това да работи? Благодаря.

Отговори:

1 за отговор № 1

Трябва да преместите логиката на метода за активиранекъм услуга. Ъгловите услуги са единични. Така се създава само един обект, който се инжектира навсякъде, където е необходимо. По този начин можете да запазите някакво просто състояние във времето. За простота да кажем, че имате обща помощна услуга:

(function() {
"use strict";

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

function UtilityService() {
var shouldActivate = true;

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

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

Тогава в контролера на черупката бихте го нареклиUtilityService и проверете дали можете да активирате, ако е така, тя ще стартира функцията за активиране и след това ще извика функцията completeActivate в 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();
}
}
})();