AMP
  • 网站

限制重复选择

简介

这是一个示例,展示如何限制 amp-list 中项目的重复选择。 此示例结合使用 amp-selectoramp-bind 来检查某个项目当前是否在列表中(由 fruits 列表填充)。

如果您选择的水果已在 fruits 列表中,则 fruits 列表不会更改。

如果您选择的水果尚未在 fruits 列表中,则会将其添加到列表末尾。

<!doctype html>
<html  lang="en">
<head>
<meta charset="utf-8">
  <title>Restrict Duplicate Selection</title>
  <link rel="canonical" href="https://amp.org.cn/documentation/examples/interactivity-dynamic-content/restrict_duplicate_selection/index.html">
  <meta name="viewport" content="width=device-width">
  <script async src="https://cdn.ampproject.org/v0.js"></script>

设置

导入 amp-bind 组件以保存所选水果

<script async custom-element="amp-bind" src="https://cdn.ampproject.org/v0/amp-bind-0.1.js"></script>

导入 amp-list 组件以导入要从中选择的水果列表

<script async custom-element="amp-list" src="https://cdn.ampproject.org/v0/amp-list-0.1.js"></script>

导入 amp-selector 组件,以便用户可以选择水果

<script async custom-element="amp-selector" src="https://cdn.ampproject.org/v0/amp-selector-0.1.js"></script>

如果将 amp-selectoramp-list 结合使用,则需要 amp-mustache 组件

<script async custom-template="amp-mustache" src="https://cdn.ampproject.org/v0/amp-mustache-0.2.js"></script>

实现

我们使用 amp-state 元素创建一个最初为空的列表,但会在用户选择水果后更新。 用户从 amp-list 元素(从 fruits.json 文件导入)中选择水果。

每次用户尝试选择水果时,amp-selector 元素都会验证该水果是否已在 fruits 列表中。 如果该水果尚未在列表中,amp-selector 将在末尾添加新水果来更改 fruits 列表的状态。 如果该水果在 fruit-selected 列表中,则列表保持不变。

从此列表中选择您最喜欢的水果
您只能向列表中添加新水果,不能多次添加相同的水果。

选择水果!

<amp-state id="fruits">
  <script type="application/json">
    []
  </script>
</amp-state>
<p>
  Pick your favorite fruites from this list <br> You can only add new fruits to the list, you can't add the same fruit
  multiple times.
</p>
<div style="resize: horizontal; overflow: auto;">
  <p [text]="fruits">Select fruits!</p>
</div>
<amp-list src="/static/samples/json/fruits.json" height="242" items="." single-item>
  <template type="amp-mustache">
    <ul>
      <amp-selector on="select:AMP.setState({fruits: fruits.includes(event.targetOption) ? fruits : fruits.concat([event.targetOption])})">
        {{#items}}
          <li option="{{name}}" role="button" tabindex="0">
            {{name}}
          </li>
        {{/items}}
      </amp-selector>
    </ul>
  </template>
</amp-list>
需要进一步解释?

如果此页面上的解释不能解答您的所有问题,请随时联系其他 AMP 用户,讨论您的确切用例。

转到 Stack Overflow
未解释的功能?

AMP 项目强烈鼓励您参与和贡献! 我们希望您成为我们开源社区的持续参与者,但我们也欢迎您为自己特别关注的问题做出一次性贡献。

在 GitHub 上编辑示例