javascript - საუკეთესო გზა გამოაჩინოთ სია json ობიექტში Angular-ის საშუალებით


ვცდილობ აჩვენო ობიექტები სიაში json ობიექტში კუთხის საშუალებით, მაგრამ ნამდვილად ვერ ვახერხებ მის მუშაობას.

JSON მიეწოდება სერვისის მეშვეობით როგორც შესრულებული პირობა:

getJson(): Promise<any> {
    return Promise.resolve(this.testdata);
}

ამრიგად, ფუნქცია აბრუნებს [object Promise]

ტესტური მონაცემების json სტრიქონის სტრუქტურა შემდეგია:

{"errorCode":"ok",
 "objList":[{},{},etc.]
}

რაც მინდა არის აღინიშნოს სია (მაგალითად ngFor-ის გამოყენებით) და იყოს წვდომა objList-ის შიგნით ობიექტების მახასიათებლებზე.

ჩემი საწყისი იდეა იყო უბრალოდ ობიექტების სიის გადათვალიერება ngFor-ით, ამისთვის მე მივუშვი შემდეგი კლასი

export class ExampleComponent implements OnInit {

json : {"objList": []}

constructor(
    private router: Router,
    public app: AppService,
    public pService: pService
) {
}

ngOnInit(){
    this.json = this.pService.getJson()
  }
}

ეს, თუმცა, მუშაობას ვერ უწევს, რადგან მე ვიღებ შეცდომას, რომ თვისება objList აკლია ტიპში Promise<any>.

მე ასევე მოვინახულე ngFor KeyValue პაიპთან ერთად, თუმცა ესეც კარგად არ მომუშოდა.

მე ვაფასებდი ნებისმიერ დახმარებას.

პასუხი #1

გთხოვთ, სცადეთ ეს კოდის ფრაგმენტი

    ngOnInit(){
    this.pService.getJson().
     then(response => {
       this.json = response;
     })
  }

პასუხი #2

პრობლემა ის არის, რომ this.pService.getJson() აბრუნებს Promise რეფერენსს. მეტი ინფორმაციისთვის Promise-ის შესახებ დააჭირეთ აქ

აქ არის გამოსწორება, რომელიც უნდა გამოიყენოთ:

ngOnInit() {
  // you will need to implement the then call of the promise
  this.pService.getJson()
    .then((result) => {
      this.json = result;
      // then call the change detection, I will explain this below
      return this.cd.detectChanges();
    });
}

დამატებით, ეს შეიძლება გამოიწვიოს changeDetector-ის პრობლემები თქვენთვის, ამიტომ შესაძლოა გინდათ ჩაამატოთ ChangeDetectorRef კომპონენტის კონსტრუქტორში

constructor(
    private router: Router,
    public app: AppService,
    public pService: Service,
    public cd: ChangeDetectorRef,
) {
}

ეს ალბათ დაგეხმარებათ, მაგრამ მე შემდგომ ვურჩიებ კიდევ უფრო მეტი კითხვა დაპირებების შესახებ და განიხილოთ Observable გამოყენება Promise-ის ნაცვლად, ნახეთ ეს ლინკი Observable-ზე