Openalyers4 Angular5 не может добавить информацию в переменную - PullRequest
0 голосов
/ 13 июня 2018

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

ERROR TypeError: Cannot read property 'setLayer' of undefined

Это мой код:

 this.map.getLayers().forEach(function(layer, i) {
          if (layer instanceof Group) {

              var layerinfo = layer.getLayers();

          }
        });

Приведенный выше код работает нормально, но когда я изменяю var layerinfo на this.setLayer, я получаю TypeError, может кто-нибудь объяснить мне, почему?

Thx!

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

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

Традиционная функция

 public myTest:string = "mytest";
 (....)
 this.map.getLayers().forEach(function(layer, i) {
          if (layer instanceof Group) {

              var layerinfo = layer.getLayers();
              console.log(this.myTest);
          }
        });

Так что в этом примере это не определенопотому что мы можем получить доступ к этому вашему компоненту (область действия ограничена только функцией!)

Функции стрелок

public myTest:string = "mytest";
 (....)
 this.map.getLayers().forEach((layer, i) => {
          if (layer instanceof Group) {

              var layerinfo = layer.getLayers();
              console.log(this.myTest);
          }
        });

Во втором примере вы можете показатьрезультат this.myTest (mytest).Поскольку этот из вас компонент доступен в функции стрелки.

Ваш случай

Так что в вашем случае:

public setLayer(){
    (...)
}
this.map.getLayers().forEach((layer, i) => {
  if (layer instanceof Group) {
      var layerinfo = layer.getLayers();
      this.setLayer();
  }
});

Если выхотите больше информации об этом

0 голосов
/ 13 июня 2018

Просто используйте функцию стрелки

this.map.getLayers().forEach((layer, i) => {
  if (layer instanceof Group) {
      var layerinfo = layer.getLayers();
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...