AngularJS не может найти функцию в пределах одной и той же службы - PullRequest
0 голосов
/ 01 сентября 2018

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

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) {

  }    

}

Ответы [ 3 ]

0 голосов
/ 01 сентября 2018

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

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) {

  }    

}
0 голосов
/ 03 сентября 2018

Другим способом сделать это будет передача внешнего «this» в функцию forEach, тогда в foreach определен контекст «this».

Что-то вроде:

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

С документацией foreach можно ознакомиться здесь .

0 голосов
/ 01 сентября 2018

Вам необходимо использовать arrow function, которые имеют контекст,

 config.campaigns.forEach((data) => {
        if (campaignToken == data.title) {
          if (data.enabled) {
            this.registerToken(campaignToken);
          }
        }
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...