无法根据查询参数筛选内容丰富的JS SDK方法

时间:2018-08-20 18:47:14

标签: javascript angular interface angular6 contentful

我试图通过构建一个动态的,有内容的服务来只获取特定的content_type,该服务可以在JS SDK中用于不同的方法。内容类型-“产品”或sys.id上的过滤器不起作用。

服务文件:

import { Injectable } from '@angular/core';
import { createClient, Entry} from 'contentful';
import { environment } from '../environments/environment';
import { Observable, from} from 'rxjs';
import { map } from 'rxjs/operators';

export interface QueryObj {
  content_type: string;
  select?: string;
}
@Injectable({
  providedIn: 'root'
})
export class ContentfulService {
  private client = createClient({
    space: environment.contentful.spaceId,
    accessToken: environment.contentful.token
  });
  queries: QueryObj[];
  constructor() {
  }
  getContentfulEntries(): Observable<QueryObj[]> {
    const contentEntries = this.client.getEntries(this.queries);
    return from(contentEntries).pipe
      (map ((res: any) => res.items));
  }

控制器文件:

import {Component, OnDestroy, OnInit} from '@angular/core';
import {ContentfulService} from '../services/contentful.service';
import { Subscription} from 'rxjs';
import { QueryObj} from '../services/contentful.service';

@Component({
  selector: 'r-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit, OnDestroy {
  title = 'Setup Environment';
  private entriesSubscription: Subscription;
  queries: QueryObj[] = [
    {
      content_type: 'product',
      select: 'sys.id'
    }
  ];
  constructor(private contentfulService: ContentfulService) {}
    ngOnInit() {
      this.entriesSubscription = this.contentfulService.getContentfulEntries()
        .subscribe((queries: QueryObj[]) => {
          this.queries = queries;
          console.log(this.queries);
        });
    }
  ngOnDestroy () {
    this.entriesSubscription.unsubscribe();
  }
}

1 个答案:

答案 0 :(得分:0)

我对Angular和相关的TypeScript不太熟悉,但是您是否将数组传递给getEntriesgetEntries除仅查询对象外。 :)

  getContentfulEntries(): Observable<QueryObj[]> {
    // this.queries is a collection or? 
    const contentEntries = this.client.getEntries(this.queries);
    return from(contentEntries).pipe
      (map ((res: any) => res.items));
  }