ngNewRouter Angularjs 1.4.4无法在回调后调用组件控制器方法

时间:2015-10-05 07:53:57

标签: angularjs callback controller angular-routing

今天我正在努力将我现有的Angular js ngRoute基本代码迁移到ngNewRouter并陷入组件控制器。根据新的apporach组件控制器没有$ scope,而不是使用"这个"。它适用于简单的用例。在我用于特定组件的用例中,我进行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.launchApplication()中抛出异常;

请帮忙。

1 个答案:

答案 0 :(得分:0)

我认为问题在于“这个”意味着根据情境而变化。似乎有一般建议将'this'分配给局部变量并使用该变量。感谢JavaScript闭包,然后保留'this'的值。

使用名为vm的局部变量似乎很常见,并替换所有'this'。与'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 () {
    ...

希望这有帮助。