簡體   English   中英

如何 dom-repeat 插槽內容

[英]How to dom-repeat slot content

我正在嘗試創建一個可重用列表,將其行模板作為插槽傳入,但插槽內容僅重復一次。 這里的例子: https : //codepen.io/chris-gunawardena/project/editor/XkPYQw

<script src="https://polygit.org/components/webcomponentsjs/webcomponents-lite.js"></script>
<link rel="import" href="https://polygit.org/components/paper-button/paper-button.html">
<dom-module id="list-repeater">
  <template>
      <template is="dom-repeat" items="{{items}}" as="item">
        <li>
          # [[index]]:  [[item]] <slot name="row-template"></slot>
        </li>
    </template>
  </template>
  <script>
    class ListRepeater extends Polymer.Element {
      static get is() {
        return 'list-repeater';
      }
      static get properties() {
        return {
          items: Array,
        };
      }
    }
    customElements.define(ListRepeater.is, ListRepeater);
  </script>
</dom-module>

這會像這樣使用:

  <list-repeater items='["a","b"]'>
    <div slot="row-template">--slot content--</div>
  </list-repeater>

該功能類似於 Iron-list,它接受一個模板,但很難遵循 Iron-list 正在做的事情。

在您的情況下使用插槽不起作用,鐵列表正在使用Templatizer Behavior來實現此目的

Polymer.Templatizer行為添加了生成模板實例的方法,每個模板實例都由匿名Polymer.PropertyEffects實例管理,其中標記模板內容中的數據綁定綁定到自身的訪問器。

我也遇到了同樣的問題,我得到了一個解決方案,你可以試試這個,讓我知道這是否適合你。 這種方法使用了模板器。

HTML:

<div id="you-component-list"><your-component></you-component><div>

JS:

在附加的方法中添加這一行:

attached() {
this.templatize(/** @type {!HTMLTemplateElement} **/ (
    this.$.'your-component-list'.querySelector('template')));},

const /** !Array */ flattenedNodes = Polymer.FlattenedNodesObserver.getFlattenedNodes(this); const distributedNodeToAppend = /** !Node */ flattenedNodes.find( (/** !Node */ node) => (node.nodeType === Node.ELEMENT_NODE && node.hasAttribute('slot'))); const clone = this.stamp({item: item}); if (distributedNodeToAppend) { const childNode = distributedNodeToAppend.cloneNode(true); childNode.removeAttribute('slot'); clone.root.querySelector('Your-component').appendChild(childNode); } Polymer.dom(this.$.'you-component-list').appendChild(clone.root);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM