【问题标题】:Angular : How to convert values in array and get value in outside scope?Angular:如何转换数组中的值并在外部范围内获取值?
【发布时间】:2019-05-29 02:12:52
【问题描述】:

在这里,在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));
  }

【问题讨论】:

  • 那是异步调用!
  • @PrashantPimpale 我打印控制台,所以首先打印外部控制台,但是如何解决这个问题
  • 你想用那个变量做什么?要在 HTML 中使用还是调用 api?
  • @PrashantPimpale 我想在 HTML 中使用
  • 就这样? --> {{rootLevelNodes | json }}

标签: javascript arrays angular


【解决方案1】:

我会将单个函数分成两部分:

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;
  }
 )
}

【讨论】:

  • 我已经尝试在内部返回,所以它会给出这样的错误 [ts] 声明类型既不是“void”也不是“any”的函数必须返回一个值。
  • 你能把函数一分为二吗?
  • Pashant 根据 parshwa 的回答我推送并得到了数组,但现在如何在第二个控制台中获取数组,其中我得到了空数组
  • 仍然会出现这样的错误(声明类型既不是'void'也不是'any'的函数必须返回一个值。在另一个函数中)
  • anotherFunction(data):{}替换anotherFunction(data): DynamicFlatNode[]
【解决方案2】:

this.rootLevelNodes.push(data.payload[i].folderName);代替this.rootLevelNodes = data.payload[i].folderName;

【讨论】:

  • 感谢 parshwa 我得到了数组,但是现在如何获取这个数组的外部范围,我得到了数组 null
  • 你能创建 stackblitz 吗?
  • Parshwa 看到我的问题的最后两行 在那个控制台中我得到了数组 null 但我想要那里还有数组值
  • Parshwa 我不知道如何创建和使用 stackblitz
  • 在构造函数中尝试this.rootLevelNodes: string[] = [];并检查
猜你喜欢
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 2022-06-20
相关资源
最近更新 更多