Как я проверяю, был ли повторно зарегистрирован динамически загружаемый угловой контроллер

#javascript #angularjs #angular-ui-router #angular-controller

#javascript #angularjs #angular-ui-router #angular-controller

Вопрос:

Я создал приложение, которое динамически загружает маршруты и, в свою очередь, контроллеры.

Мои контроллеры добавляются с помощью ng-repeat в мой индексный файл, а затем загружаются вручную.

Проблема, с которой я сталкиваюсь, заключается в том, что при обновлении иногда загружается моя маршрутизация и пытается перенаправить на заданный маршрут до загрузки его контроллера.

Мой вопрос в том, есть ли способ определить, загружен ли контроллер с помощью какого-либо события?

Динамически загружайте мои контроллеры:

 <script ng-repeat="script in clientScripts" ng-src="{{script}}"></script>
  

Вручную загрузите контроллеры

 app.config(function($provide, $compileProvider, $controllerProvider, $routeProvider, $httpProvider, uiGmapGoogleMapApiProvider, $injector, toastrConfig, constant) {
        app.$$registerFactory = $provide.factory;
        app.$$registerService = $provide.service;
        app.$$registerCtrl = $controllerProvider.register;
        app.$$routeProviderRef = $routeProvider;
        app.$$httpProviderRef = $httpProvider;
        app.$$registerDirective = $compileProvider.directive;
...
...
  

Инициализировать мой контроллер

 app.$$registerCtrl('AchievementsController', AchievementsController);
  

Динамически загружайте мои маршруты

 /*
        // DYNAMIC CLIENT ROUTING
        // ======================
        // corresponding controllers and factories need
        // to be added in the client config.json
        */
        $rootScope.$watch('config', function(x, y, z) {
            if ($rootScope.config) {

                // get route json and start adding routes
                $http.get('../content/'   $rootScope.config.contentFolder   '/config/route.json').then(function(response) {
                    angular.forEach(response.data, function(value) {

                        // Add routes from client route.json
                        angular.module('dashboard').$$routeProviderRef.when(value.route, {
                            caseInsensitiveMatch: value.vars.caseInsensitiveMatch,
                            templateUrl: value.vars.templateUrl,
                            resolve: {
                                auth: function(AuthFactory) {
                                    return value.requiresAuthentication === true ? AuthFactory.IsAuthenticated() : AuthFactory.IsAnnonymous();
                                }
                            }
                        });




                    });

                    var route = SessionStorage.getObject('route');
                    if (route amp;amp; $route.current.originalPath != route amp;amp; route != '/dashboard') {
                        $location.path(route);

                    }
                });
            }
        });