AngularJS foreach 无法在同一服务中找到功能



需要一些帮助,对于我的生活,我无法让它工作。我正在尝试遍历配置值内的数组,然后在我创建的服务中触发另一个函数,但出现错误

TypeError: Cannot read property 'registerToken' of undefined

难道没有更好的方法来做到这一点,感觉很笨拙吗?

CampaignService.ts

import { ServerConfig } from "../core/ServerConfig";
declare var config: ServerConfig;
export class CampaignService {
static $inject = ["localStorageService"];
constructor(
public localStorageService: angular.local.storage.ILocalStorageService
) {
}             
launchCampaign(campaignToken: string) {
if (campaignToken) {
config.campaigns.forEach(function (data) {
if (campaignToken == data.title) {
if (data.enabled) {
this.registerToken(campaignToken);
}
}
});
}
};
registerToken(campaignToken: string) {
}    
}

您需要使用具有上下文的arrow function

config.campaigns.forEach((data) => {
if (campaignToken == data.title) {
if (data.enabled) {
this.registerToken(campaignToken);
}
}
});

经过一些调查,我发现这是最好的速记可能是错误的,欢迎评论

import { ServerConfig } from "../core/ServerConfig";
declare var config: ServerConfig;
export class CampaignService {
static $inject = ["localStorageService"];
constructor(
public localStorageService: angular.local.storage.ILocalStorageService
) {
}             
launchCampaign(campaignToken: string) {
if (campaignToken) {
(config.campaigns.find(function (obj) { return obj.title === campaignToken; })) ? this.registerToken(campaignToken) : void (0);
}
};
registerToken(campaignToken: string) {
}    
}

另一种方法是将外部"this"传递给forEach函数,然后foreach定义了"this"上下文。

像这样:

config.campaigns.forEach(function (data) {
if (campaignToken == data.title) {
if (data.enabled) {
this.registerToken(campaignToken);
}
}
}, this);

您可以在此处参考foreach的文档。

最新更新