Polymer 2 中的 getContentChildren 等价物
getContentChildren equivalent in Polymer 2
我有一个自定义元素
<!-- 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]
这会 return <div toggle>I'm the toggle</div>
但是在 Polymer 2 中。getContentChildren
不再受支持,所以这样做
this.$.toggleContent.assignedNodes({flatten: true}).filter(function(n) {
return (n.nodeType === Node.ELEMENT_NODE);
});
我 return 不是预期的元素,<div slot="toggle">I'm the toggle</div>
。
如何在 Polymer 2 中使用 assignedNodes()
获得相同的结果?
请看下面plunker
谢谢。
使用以下代码:
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)
The this.$
hash is created when the shadow DOM is initialized. Nodes
created dynamically are not added to the this.$
hash. So, you have to use this.shadowRoot.querySelector
.
更新演示后提供:
_toggleEl
是一个 array/object 并且您正在将它与一个元素进行比较。所以,它总是返回 false
。所以,像在 polymer 1
.
中那样使用 var equal = elementClicked === this.toggleEl[0]
我有一个自定义元素
<!-- 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]
这会 return <div toggle>I'm the toggle</div>
但是在 Polymer 2 中。getContentChildren
不再受支持,所以这样做
this.$.toggleContent.assignedNodes({flatten: true}).filter(function(n) {
return (n.nodeType === Node.ELEMENT_NODE);
});
我 return 不是预期的元素,<div slot="toggle">I'm the toggle</div>
。
如何在 Polymer 2 中使用 assignedNodes()
获得相同的结果?
请看下面plunker 谢谢。
使用以下代码:
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)
The
this.$
hash is created when the shadow DOM is initialized. Nodes created dynamically are not added to thethis.$
hash. So, you have to usethis.shadowRoot.querySelector
.
更新演示后提供:
_toggleEl
是一个 array/object 并且您正在将它与一个元素进行比较。所以,它总是返回 false
。所以,像在 polymer 1
.
var equal = elementClicked === this.toggleEl[0]