重要事項:本文件不適用於您目前選取的格式 stories!
amp-render
說明
使用範本呈現遠端或內嵌資料。
必要指令碼
<script async custom-element="amp-render" src="https://cdn.ampproject.org/v0/amp-render-1.0.js"></script>
用法
amp-render
元件會擷取 JSON 資料,然後使用範本呈現該資料。amp-render
可以使用來自 CORS JSON 端點、來自 amp-state
狀態變數或來自 amp-script
的資料。
由於 amp-render
的資料可能來自 amp-script
,因此您可以使用自己的 JavaScript 來篩選資料、限制其大小、建立清單功能,以及自訂元件的行為和外觀。如果您偏好使用 HTML 屬性,amp-list
提供了更豐富的功能集。
您可以用下列兩種方式之一指定範本
- 參考現有範本元素 ID 的
template
屬性。
<template id="my-template" type="amp-mustache"> Your personal offer: ${{price}}</template> <amp-render template="my-template" src="https://example.com/data.json"> </amp-render>
- 直接巢狀於
amp-render
元素內的範本元素。
<amp-render src="https://example.com/data.json"> <template type="amp-mustache"> Your personal offer: ${{price}} </template> </amp-render>
如需範本的詳細資訊,請參閱 AMP HTML 範本。
XHR 批次處理
AMP 會批次處理 XMLHttpRequests (XHR) 至 JSON 端點。這讓您可以使用單一 JSON 要求做為 AMP 頁面上多個元素的資料來源。例如,如果您的 <amp-render>
向端點發出 XHR,在 XHR 傳輸期間,所有後續向相同端點發出的 XHR 都不會觸發,而是會傳回第一個 XHR 的結果。
預留位置和後備方案
<amp-render>
支援選用的預留位置和/或後備方案。
- 預留位置是具有
placeholder
屬性的子元素。此元素會顯示直到<amp-render>
成功載入為止。如果也提供了後備方案,則當<amp-render>
載入失敗時,預留位置會隱藏。 - 後備方案是具有
fallback
屬性的子元素。如果<amp-render>
載入失敗,則會顯示此元素。
如需更多資訊,請參閱預留位置與後備方案。請注意,子元素不能同時是預留位置和後備方案。
<amp-render src="https://example.com/data.json"> <div placeholder>Loading ...</div> <div fallback>Failed to load data.</div> </amp-render>
重新整理資料
<amp-render>
元素公開了 refresh
動作,其他元素可以在 on="tap:..."
屬性中參考該動作。
<button on="tap:my-component.refresh">Refresh</button> <amp-render id="my-component" src="https://example.com/data.json"> <template type="amp-mustache"> <div>{{title}}</div> </template> </amp-render>
動態調整大小
在某些情況下,我們可能需要 <amp-render>
元素在使用者互動時調整大小。例如,當內容不符合具有 layout="fixed-height"
的指定 height
屬性,或指定的 height
過大而產生空白時。<amp-render
元素公開了 resizeToContents
動作,可調整高度以符合內容。請參閱以下範例
<button on="tap:my-component.resizeToContents()">Expand</button> <amp-render id="my-component" src="https://example.com/data.json" layout="fixed-height" height="30"> <template type="amp-mustache"> {{#cars}} <p>{{make}} {{model}}</p> {{/cars}} </template> </amp-render>
layout="responsive"
的 <amp-render>
執行個體,resizeToContents
動作可能會破壞長寬比,因為高度會變更,但寬度可能會保持固定。替換
<amp-render>
允許所有標準 URL 變數替換。如需更多資訊,請參閱 替換指南。
例如
<amp-render src="https://example.com/data.json?RANDOM"></amp-render>
可能會向類似 https://example.com/data.json?0.8390278471201
的網址發出要求,其中 RANDOM 值是在每次曝光時隨機產生。
屬性
src
(必要)
遠端端點的 URL,該端點會傳回將在此 <amp-render>
內呈現的 JSON。src
屬性有三個有效的通訊協定。
- https:這必須參照 CORS HTTP 服務。不安全的 HTTP 不受支援。
- amp-state:用於從
<amp-state>
資料初始化。如需更多詳細資訊,請參閱amp-list
中的 從<amp-state>
初始化 章節。 - amp-script:用於將
<amp-script>
函式做為資料來源。如需更多詳細資訊,請參閱amp-list
中的 將<amp-script>
做為資料來源 章節。
如果存在 [src]
屬性,則可以省略 src
屬性。[src]
支援 URL 和非 URL 運算式值。
template (範本)
參考已定義範本元素的 ID。如果範本是 amp-render
元素的子元素,則此屬性不是必要的。
credentials (憑證)
定義 Fetch API 指定的 credentials
選項。
- 支援的值:
omit
、include
- 預設值:
omit
若要傳送憑證,請傳遞 include
的值。如果設定此值,則回應必須遵循 AMP CORS 安全性指南。
以下範例在 credentials
中使用 "include" 值來顯示個人化內容
<amp-render credentials="include" src="<%host%>/json/product.json?clientId=CLIENT_ID(myCookieId)" > <template type="amp-mustache"> Your personal offer: ${{price}} </template> </amp-render>
xssi-prefix
導致 <amp-render>
在剖析之前,從擷取的 JSON 中移除前置字串。這對於包含 安全性前置字串 (例如 )]}
) 的 API 很有用,以協助防止跨網站指令碼攻擊。
例如,假設我們有一個 API 傳回此回應
)]}{ "items": ["value"] }
我們可以指示 amp-render
移除安全性前置字串,如下所示
<amp-render xssi-prefix=")]}" src="https://example.com/data.json"></amp-render>
key (索引鍵)
定義運算式以尋找要呈現的回應中的子物件。例如,假設我們有一個 API 傳回此回應
{ "automobiles": { "cars": { "german": { "make": "BMW", "model": "M3" }, "american": { "make": "Tesla", "model": "Model X" } } } }
如果我們只想顯示回應中的德國汽車,可以使用 key
屬性。
<amp-render src="https://example.com/data.json" key="automobiles.cars.german"> <template type="amp-mustache"> {{make}} {{model}} </template> </amp-render>
key
屬性僅在 src
是 URL 時有效。若要存取透過 JavaScript 擷取的資料中的子物件,請使用您自己的程式碼在將子物件傳遞至 <amp-render>
之前,先找到該子物件。binding (繫結)
控制是否在同時使用 amp-render
和 amp-bind
的頁面上,封鎖呈現以評估子項中的繫結 (例如 [text]
)。
binding="never"
或binding="no"
:永遠不要封鎖呈現 (最快)。binding="refresh"
(預設):在初始載入時不封鎖呈現 (較快)。binding="always"
:永遠封鎖呈現 (慢速)。
基本上,binding="always"
是 binding="refresh"
,也會封鎖以評估 amp-render
初始載入時的繫結。
binding
屬性,則預設為 refresh
。這與 amp-list
繫結 (預設為 always
) 不同。由於此變更,如果僅指定繫結的 src
屬性 ([src]
),則必須在元件上包含 binding="always"
屬性,才能在初始載入時顯示範本化內容。通用屬性
此元素包含擴充至 AMP 元件的通用屬性。
無障礙功能
對於沒有 aria-live 屬性的 amp-render
執行個體,將會新增 aria-live="polite"
,以便螢幕閱讀器宣告內容的任何變更。若要覆寫 aria-live="polite"
的新增,請新增 aria-live="off"
。
驗證
請參閱 AMP 驗證器規格中的 amp-render 規則。
您已閱讀本文件十幾次,但它仍然沒有真正涵蓋您的所有問題?也許其他人也有相同的感受:在 Stack Overflow 上與他們聯繫。
前往 Stack Overflow 發現錯誤或缺少功能?AMP 專案強烈鼓勵您的參與和貢獻!我們希望您能成為我們開放原始碼社群的長期參與者,但我們也歡迎針對您特別感興趣的問題提供一次性貢獻。
前往 GitHub