ngNewRouter Angularjs 1.4.4 не может вызвать методы контроллера компонента после обратного вызова

0

Сегодня я работал над переносом существующего базового кода Angular js ngRoute на ngNewRouter и застрял в контроллере компонентов. Согласно новому контроллеру компонента apporach не существует $ scope, вместо него используется "this". Он отлично работает для простого использования. В моем случае для конкретного компонента я делаю вызов REST API для получения данных. Все работает, но когда происходит обратный вызов, он не идентифицирует "этот" определенный объект. Ниже приведен фрагмент кода для более подробной информации.

Компонентный контроллер для выполнения вызова для получения данных:

var ClubonboardingController = function ($location, ApplicationLoaderService, ApplicationConstants, $window, ResourceImplementation, $rootScope) {
    //Launch Application
    this.launchApplication = function () {
        this.cacheLoaded = true;
    };


    //Method to initialize 
    this.init = function () {            
            //show loading screen
            this.showLoadingScreen = true;                   
            //Initilize Application cache
            ApplicationLoaderService.initilizeApplicationCache($rootScope, "3252345", true, "en_US", function () {
                this.launchApplication(); //This throws function not found exception
            });

    };

    //Call init() to initialze the loading.
    this.init();    
};

app.controller("ClubonboardingController", ClubonboardingController);
ClubonboardingController.$inject = ['$location', 'ApplicationLoaderService', 'ApplicationConstants', '$window', 'ResourceImplementation', '$rootScope'];

Проблема: после того, как код обратного вызова считает "это" глобальным объектом javascript, вместо этого "this" для этого контроллера и не сможет найти что-либо в этом контроллере, и он генерирует исключение в this.launchApplication(); ,

Пожалуйста помоги.

Теги:
callback
controller
angular-routing

1 ответ

0

Я думаю, проблема заключается в том, что "это" означает изменения в зависимости от контекста. Кажется, существует общая рекомендация присвоить "это" локальной переменной и использовать переменную. Благодаря закрытию JavaScript значение "this" сохраняется.

Использование локальной переменной vm, как представляется, является обычным явлением и заменяет все это. с 'vm.' Ваш код в конечном итоге изменится на

var ClubonboardingController = function ($location, ApplicationLoaderService, ApplicationConstants, 
                                     $window, ResourceImplementation, $rootScope) {
var vm = this;

 //Launch Application
vm.launchApplication = function () {
    vm.cacheLoaded = true;
};

//Method to initialize 
vm.init = function () {
    ...

Надеюсь это поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню