1

嗨,我正在尝试使用 Contentful 交付 API 将 Contentful 与 Angular2 一起使用

例如,我可以获得特定的数据

内容丰富的.service.ts

HomePage() {              
    return this.http
        .get('https://cdn.contentful.com/spaces/PRIVATE/entries?access_token=PRIVATE&sys.id=PRIVATE')
        .map((res:Response) => res.json());    /* map response to var */  
}

主页.component.ts

export class Home {

pagename: string;

    ngOnInit() {

        this.http.HomePage()
           .subscribe( 
               data => {
                       this.pagename = data.items[0].fields.pageName;
               }
          );
    }
 }

但是,如果我有多个项目,我需要将每个 data.item 声明为一个字符串,这会变得很冗长。然后,如果我决定向内容类型添加一个新字段,这可能会添加到数组的中间,从而破坏我拥有的当前绑定,并且需要再次更新它们。

我看到了另一个仓库,他们在模板中使用了我正在寻找的架构,我知道这是做我需要做的事情的正确方法。

例如 homepage.template.html

<ul contentful-entries="'content_type=dog&limit=10'">
  <li ng-repeat="dog in $contentfulEntries.items">
    {{ dog.fields.name }}
  </li>
</ul>

这意味着不存在数组中断的风险,并且 tbh 构造了代码以进行缩放和添加。但是我见过这个的回购

jvandemo 的示例回购

是用 AngularJS V1 编写的,我不确定如何在 Angular2 中使用它。我还在学习,我觉得如果有人能指出我正确的方向和例子,我可以继续征服这个项目!

理想情况下是示例组件和服务。我是否还假设需要应用 Contentful SDK?

还有链接关系的问题(如何内容推荐构建大型内容条目)。

Contentful 将列出 Items 中的字段,这些字段与具有该 ID 和内容的字段中的内容具有链接关系。并且该项目的任何资产都将放入包含/资产中

例如

 {
  "sys": {
      "type": "Array"
  },
  "total": 1,
  "skip": 0,
  "limit": 100,
  "items": [
     {
        "sys": {
            "space": {
            "sys": {
            "type": "Link",
            "linkType": "Space",
            "id": "1ST_UNIQUE_ID"
        }
    },
    "id": "2ND_UNIQUE_ID",
    "type": "Entry",
    "createdAt": "2016-07-14T16:30:12.787Z",
    "updatedAt": "2016-07-14T16:30:12.787Z",
    "revision": 1,
    "contentType": {
      "sys": {
        "type": "Link",
        "linkType": "ContentType",
        "id": "pressRelease"
      }
    },
    "locale": "en-US"
  },
  "fields": {
    "title": "Title of Review",
    "excerpt": "Excerpt of review",
    "content": "Content of Review",
    "dateCreated": "2016-07-01",
    "datePublished": "2016-07-14",
    "featureImage": {
      "sys": {
        "type": "Link",
        "linkType": "Asset",
        "id": "3RD_UNIQUE_ID"
      }
    }
  }
}
],
"includes": {
    "Asset": [
       {
         "sys": {
         "space": {
         "sys": {
             "type": "Link",
             "linkType": "Space",
             "id": "1ST_UNIQUE_ID"
         }
       },
       "id": "4TH_UNIQUE_ID",
       "type": "Asset",
       "createdAt": "2016-07-14T16:30:05.078Z",
       "updatedAt": "2016-07-14T16:30:05.078Z",
       "revision": 1,
       "locale": "en-US"
    },
    "fields": {
      "title": "Image Title",
      "description": "Image Description",
      "file": {
        "url": "//url-of-image.jpg",
        "details": {
          "size": 43098,
          "image": {
            "width": 1278,
            "height": 928
          }
        },
        "fileName": "image.jpg",
        "contentType": "image/jpeg"
      }
    }
  }
  ]
 }
 }

我假设通过查找您需要的项目的 ID,然后您获得资产 ID 的任何关系,然后查看资产?但这又是通过 SDK 完成的吗?还是我需要编写这段代码?

我迷路了...

任何帮助表示赞赏,谢谢。

4

1 回答 1

2

我在 Contentful 工作,负责 JS SDK。

我可以在这里看到几个解决方案:

  1. 您可以按照我们构建的这个示例并从那里继续,它构建在 Angular 之上,您可能还需要更新依赖项等......如果您需要任何帮助,请随时在那里创建问题,

  2. 使用 ngUpgrade,您可以使 Angular 1 模块在 Angular 2 上运行,反之亦然,更多信息请点击此处。这是一个快速而肮脏的解决方案

  3. 您可以分叉代码并阅读Angular 迁移指南

  4. 您可以使用 contenful.js SDK 并将其包装在服务中,在那里您将获得链接解析等...然后填充您的视图

我现在无法为您提供示例代码,但我们正在使用 Angular 2 和其他框架开发示例项目。

请注意,您提到的 repo 不是 Contentful 官方维护的。

最好的,哈立德

于 2016-07-18T11:13:02.920 回答