Отже, я переписав відповідь @Bema на TypeScript, і ось як це виглядає:
namespace MyAwesomeApp {
function detectBackButton(
$rootScope: ng.IRootScopeService,
$location: ng.ILocationService
) {
let actualLocation: string = '';
$rootScope.$on('$locationChangeSuccess',
() => {
actualLocation = $location.path();
});
$rootScope.$watch(() => $location.path(),
(newLocation: string, oldLocation: string) => {
if (actualLocation === newLocation) {
}
});
}
detectBackButton.$inject = [
'$rootScope',
'$location'
];
angular
.module('app')
.run(detectBackButton);
}
Нам не потрібно створювати властивість поза $rootScopeслужбою, ми можемо просто мати свій код "при успішному зміні місцеположення" та "при зміненому розташуванні", обидва закриваються над локальною actualLocationзмінною. Звідти ви можете робити все, що завгодно, як у оригінальному коді. Зі свого боку, я б розглянув можливість трансляції події, щоб окремі контролери могли робити все, що їм потрібно, але ви могли б включити глобальні дії, якщо довелося б .
Дякую за чудову відповідь, і я сподіваюся, це допоможе іншим користувачам машинопису.