Имам следната архитектура на моето ъглово приложение.
Страница на индекса -> Страница на черупката -> Потребителски изглед (Оттук Потребителят може ли да отвори подпреглед)
всяка промяна на маршрута в моето приложение преминава през страницата 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();
}
}
})();