如何访问通过 Polymer 定义的自定义元素的内部元素

How to access inner elements of an custom element defined through Polymer

我正在使用 Dart 在 Polymer 中创建自定义元素。我想从标签内部提取一些内容,像这样:

<my-element>
  <name>doof</name>
</my-element>

在用于处理 my-element 元素的 dart 代码中,我发现很难提取 "name" 元素的内容。下面的代码说明了我所做的一些尝试:

@CustomTag('my-element')
    class MyElement extends PolymerElement {

     MyElement.created() : super.created() {

           // Will always find the first element in the document. That quickly
           // gets confusing when I have multiple instances of  <my-element> in the
           // document.
           final Element nameElement = querySelector("name");

           // Returns null
           final Element nameElement = shadowRoot.querySelector("name");
     }
}

...所以我很困惑:-)有人有什么想法吗?

首先,除了一些局部变量初始化之外,不要理会 created 构造函数。
改写 attachedready 等生命周期回调。 querySelector("name"); 应该可以。如果您获得文档中的第一个元素,那么您应该使用 this.querySelector("name");(取决于您的导入)shadowRoot.querySelector("name"); 用于 <my-element><template> 标签内的元素,而不是用于其children(就像你的问题)。

@CustomTag('my-element')
    class MyElement extends PolymerElement {

     MyElement.created() : super.created();

     @override
     void ready() {

           // Will always find the first element in the document. That quickly
           // gets confusing when I have multiple instances of  <my-element> in the
           // document.
           final Element nameElement = this.querySelector("name");
     }
}

this.shadowRoot.querySelector() 将扫描当前 'my-element' 标签内的 dom。

<my-element>
  <div id="myName">doof</div>
<my-element>

this.shadowRoot.querySelector("#myName") 将 return DivElement