javascript - 动态组件上的 Angular 5 下一个按钮

标签 javascript angular typescript contentful

我不确定这是否可能但是.. 我有一个页面从外部 api 引入项目列表,所以页面上有 5 个元素现在每个元素都是指向其自己页面的链接通过查询字符串动态生成,例如 [routerLink]="['page', item.fields.id]" 现在我想要做的是在生成的页面上有一个下一步按钮,该按钮转到下一个项目生成页面

我的设置如下...

contenful.service.ts

所以这设置了我的 api 调用

 // Get all the program items
 getProgramItems(query?: object): Promise<Entry<any>[]> {
    return this.cdaClient.getEntries(Object.assign({
      content_type: CONFIG.contentTypeIds.programItems
    }, query))
    .then(res => res.items);
 }
 // Get only the program items with specified week
 getWeekItems(week: number): Promise<Entry<any>[]> {
    return this.getProgramItems({'fields.week': week});
 }

 // Get program with certain id
  getAsset(id: string): Promise<Entry<any>[]> {
    return this.getProgramItems({'sys.id': id});
  }

week-1.component.ts

我正在调用数据然后显示项目列表

export class Week1Component implements OnInit {
  private programItems: Entry<any>[] = [];
  private week1Items: Entry<any>[] = [];

  constructor(
    private contentfulService: ContentfulService
  ) { }

  ngOnInit() {
      this.contentfulService.getWeekItems(1)
      .then((week1Items) => {
        // set week1Items one and order them by sequenceOrder
        this.week1Items = _.orderBy(week1Items, ['fields.sequenceOrder'], ['asc']);
        })
      .then(() => {
        console.log(this.week1Items);
      });
  }

week-1.component.html

这是我显示列表项的地方,并且有动态创建页面的 routerLink

 <div class="program_card" *ngFor='let item of week1Items'>
      <span class="program_card_part-number">Part {{item.fields.sequenceOrder}}</span>
      <div class="program_card_title">
        <span class="program_card_title_main">{{item.fields.assetTypeHeading}}</span>
        <span class="program_card_title_sub">{{item.fields.title}}</span>
      </div>
      <div class="program_card_inner">
        <div [routerLink]="['asset', item.sys.id]" class="program_card_inner_icon_{{item.fields.assetType}}"></div>
        <img src="{{item.fields.overviewImage.fields.file.url}}">
      </div>
      <div *ngIf="item.fields.comment" class="program_card_comment">
          <div class="program_card_comment_radius-fix"></div>
          <img src="../../../assets/Images/image.jpg">
          <p>{{item.fields.comment}}</p>
      </div>
    </div>

asset-page.component.ts

export class AssetPageComponent implements OnInit {
  asset: Entry<any>[];

  constructor(
     private contentfulService: ContentfulService,
     private route: ActivatedRoute
  ) { }

  ngOnInit() {
    this.route.paramMap
    .switchMap((params: ParamMap) => this.contentfulService.getAsset(params.get('id')))
    .subscribe(asset => {
      this.asset = asset;
      console.log(this.asset);
    });
  }

}

所以我想做的是在动态创建的 Assets 页面上有一个下一个按钮,它会转到第 1 周页面列表中的下一个动态创建的 Assets 页面......就像我说的那样我什至没有确定这样的事情是否可行,但我们将不胜感激!如果您需要更多信息,请告诉我

谢谢

最佳答案

您想要做的是将 getProgramItems 的响应存储在某种状态管理服务中。甚至可能只是在获取数据的服务中。这样,一旦它被检索到,任何注入(inject)服务的组件都可以访问数据。然后,甚至可以将动态链接分离到一个指令中,您可以将其中一个程序项传递到该指令中。

在 Angular 中搜索状态管理服务。

如果您发现自己不得不在多个组件之间共享大量数据,我建议您研究一下像 NGRXStore 这样的工具。它将帮助您以一种非常干净高效的方式管理需要在应用程序的各个部分之间共享的 API 数据。

关于javascript - 动态组件上的 Angular 5 下一个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48758993/

相关文章:

javascript - typescript 中基于两个值的数组迭代

javascript - 使用 var i=new Image(); i.src...而不是真正的 ajax 仅用于信号远程命令

javascript - 有没有更简洁的方式来编写JS来显示和隐藏?

javascript - getJson 返回所有 Handler 而不是数据

angular - 将类添加到 Angular 2 中的某一特定行

Angular 6无法读取未定义的属性 'userEmail'

javascript - Jquery多个div同一个类,只拖 "this"div

javascript - (更改)angular2 中的事件 Hook

typescript - 传递接受较少参数的函数 - 如何为传递的函数强制执行相同数量的参数

typescript - 为什么 eslint 在 Github Actions 上失败,但在本地工作?