【问题标题】:getContentChildren equivalent in Polymer 2Polymer 2 中的 getContentChildren 等效项
【发布时间】:2017-09-06 06:35:41
【问题描述】:

我有一个自定义元素

<!-- element template -->
<dom-module id="custom-element">
  <template>
    <style></style>
    <div class="toggle">
      <slot id="toggleContent" name="toggle"></slot>
    </div>
  </template>
  <script>...</script>
</dom-module>

<!--usage-->
<custom-element>
  <div slot="toggle">I'm the toggle</div>
</custom-element>

在 Polymer 1.0 中,我可以使用

获取分布式子节点
[this.getContentChildren('#toggleContent')\[0\];][1] 

这将返回&lt;div toggle&gt;I'm the toggle&lt;/div&gt;

但是在 Polymer 2 中。getContentChildren 不再受支持,并且以这种方式进行

this.$.toggleContent.assignedNodes({flatten: true}).filter(function(n) {
  return (n.nodeType === Node.ELEMENT_NODE);
});

没有返回我预期的元素&lt;div slot="toggle"&gt;I'm the toggle&lt;/div&gt;

如何在 Polymer 2 中使用 assignedNodes() 获得等效结果?

请看以下plunker 谢谢。

【问题讨论】:

    标签: polymer polymer-1.0 polymer-2.x


    【解决方案1】:

    使用以下代码:

    this.shadowRoot
      .querySelector('#toggleContent')
      .assignedNodes({flatten:true})
      .filter(n => n.nodeType === Node.ELEMENT_NODE)
    

    但如果你有一个slot,那么你可以这样做:

    this.shadowRoot
          .querySelector('slot')
          .assignedNodes({flatten:true})
          .filter(n => n.nodeType === Node.ELEMENT_NODE)
    

    this.$ 哈希是在初始化影子 DOM 时创建的。节点 动态创建的不会添加到 this.$ 哈希中。所以,你必须使用this.shadowRoot.querySelector

    更新提供演示后:

    _toggleEl 是一个数组/对象,您正在将它与一个元素进行比较。所以,它总是返回false。因此,请像在 polymer 1 中一样使用 var equal = elementClicked === this.toggleEl[0]

    【讨论】:

    • 嗯,不,这不是问题所在。你介意看看下面的笨蛋吗? plnkr.co/edit/Nq7lvk?p=preview
    • 既然this._toggleEl 是一个数组,你为什么不像polymer 1那样使用var equal = elementClicked === this.toggleEl[0]
    • 哦,是的!你说的对!感谢您指出。当我查看控制台打印时,它看起来像是返回了一个对象而不是一个数组,因此我从未想过它。 PEBCAK。你介意编辑你的答案,我很乐意接受吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多