Angular: Как преобразовать значения в массиве и получить значение вне области видимости? - PullRequest
0 голосов
/ 02 января 2019

Здесь, в DynamicDatabase классе, я получаю значение с сервера и получаю В console.log(this.rootLevelNodes) // folder-1 folder-2 folder-3 folder-4, см. Код ниже, но я хочу это значение в массиве. а потом снаружи this.route печатаю console.log(this.rootLevelNodes) // there I got null [] (this.rootLevelNodes) in function but I dont know why I got null result но там, где и хочу В формате массива приведи, как можно увидеть мой приведенный ниже код и помочь мне?

@Injectable()
export class DynamicDatabase {

  rootLevelNodes: string[] = [];
  constructor(private route : ActivatedRoute, private userService : UserService){}
  upperFolderId;
  urlOfFolder;

  initialData(): DynamicFlatNode[] {

    this.route.params.subscribe(params => {

      this.upperFolderId = params['userid'];
      this.urlOfFolder = params['url']+'/'+this.upperFolderId;

      this.userService.getPatternMainFolder({'urlOfFolder' : this.urlOfFolder}).subscribe(
        (data) => {
          if(data != undefined && data != '' && data.payload != undefined && data.payload != ''){
            for(var i = 0 ; i < data.payload.length ; i++){
              this.rootLevelNodes = data.payload[i].folderName;
              console.log(this.rootLevelNodes); // folder-1
                                                   folder-2
                                                   folder-3
                                                   folder-4
                                                   <-- this type result I got

              // I want this type result 
              console.log(this.rootLevelNodes); // ['folder-1','folder-2','folder-3','folder-4']
            }
          }
        }
      )
    });

    console.log(this.rootLevelNodes);  // [] --> Here I result got null array

     // Here also I want this type result want
    console.log(this.rootLevelNodes); //  ['folder-1','folder-2','folder-3','folder-4']
    return this.rootLevelNodes.map(name => new DynamicFlatNode(name, 0, true));
  }

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Вместо this.rootLevelNodes = data.payload[i].folderName; до this.rootLevelNodes.push(data.payload[i].folderName);

0 голосов
/ 02 января 2019

Я бы разделил одну функцию на две части:

initialData() {
    this.route.params.subscribe(params => {
      this.upperFolderId = params['userid'];
      this.urlOfFolder = params['url']+'/'+this.upperFolderId;
      this.anotherFunction(this.urlOfFolder);
    });
  }

anotherFunction(data) {
    this.userService.getPatternMainFolder({'urlOfFolder' : data}).subscribe(
    (data) => {
     if(data != undefined && data != '' && data.payload != undefined && data.payload != ''){
    for(var i = 0 ; i < data.payload.length ; i++){
      this.rootLevelNodes.push(data.payload[i].folderName);
      console.log(this.rootLevelNodes);
    }
  }
  return this.rootLevelNodes;
  }
 )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...