今天我正在努力将我现有的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()中抛出异常;
请帮忙。
答案 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 () {
...
希望这有帮助。