如何检查自定义元素是否已注册?
How to check Custom Element is registered?
某些方法创建了我的自定义元素(使用聚合物创建)的新实例并将其附加到页面上。但我想检查元素是否在添加之前注册,并在糟糕的情况下将错误打印到控制台。我的意思是如果我忘记导入组件 html 声明怎么办:
<!--I forgot write it in my HTML file -->
<!--<link rel="import" href="packages/visualytik/vis_starter.html">-->
所以,如果我忘记导入,我想在控制台中打印错误。
我知道一个棘手的方法:
import 'my_custom_component.dart';
Element component = new Element.tag('my-custom-component');
bool registered = component is MyCustomComponent;
但这是一个困难的方法,因为我们应该先创建组件并且必须在 dart 文件中导入 MyCustomComponent.dart
。我可以用其他方式检查吗?类似于:
document.isRegistered('my-custom-component');
更新3
您还可以使用新的 @HtmlImport
注释。如果您导入 class,那么您可以确定您还导入了元素的 HTML。另见
更新2
参见 Hunting down unregistered elements
更新
在您的元素中使用自定义构造函数 class 并在那里进行注册,但前提是尚未完成。
class MyCustomComponent extends ... {
bool _isRegistered;
bool get isRegistered => _isRegistered;
factory MyCustomComponent() {
if(!isRegistered) {
registerElement();
_isRegistered = true;
}
return new Element.tag('my-custom-element');
}
}
然后像
一样创建新实例
new MyCustomElement();
并且您始终可以确保该元素仅注册一次(但当然您始终需要使用此构造函数)。
原创
如果您通过自己调用 document.RegisterElement()
而不是依赖 Polymer 来注册您的元素,则需要持有对构造函数引用 document.RegisterElement()
returns 的引用,否则您将获胜' 能够创建元素的实例。
因此,您只需要检查您是否已经拥有对构造函数的引用。另见 https://developer.mozilla.org/en-US/docs/Web/API/Document/registerElement
某些方法创建了我的自定义元素(使用聚合物创建)的新实例并将其附加到页面上。但我想检查元素是否在添加之前注册,并在糟糕的情况下将错误打印到控制台。我的意思是如果我忘记导入组件 html 声明怎么办:
<!--I forgot write it in my HTML file -->
<!--<link rel="import" href="packages/visualytik/vis_starter.html">-->
所以,如果我忘记导入,我想在控制台中打印错误。
我知道一个棘手的方法:
import 'my_custom_component.dart';
Element component = new Element.tag('my-custom-component');
bool registered = component is MyCustomComponent;
但这是一个困难的方法,因为我们应该先创建组件并且必须在 dart 文件中导入 MyCustomComponent.dart
。我可以用其他方式检查吗?类似于:
document.isRegistered('my-custom-component');
更新3
您还可以使用新的 @HtmlImport
注释。如果您导入 class,那么您可以确定您还导入了元素的 HTML。另见
更新2 参见 Hunting down unregistered elements
更新 在您的元素中使用自定义构造函数 class 并在那里进行注册,但前提是尚未完成。
class MyCustomComponent extends ... {
bool _isRegistered;
bool get isRegistered => _isRegistered;
factory MyCustomComponent() {
if(!isRegistered) {
registerElement();
_isRegistered = true;
}
return new Element.tag('my-custom-element');
}
}
然后像
一样创建新实例new MyCustomElement();
并且您始终可以确保该元素仅注册一次(但当然您始终需要使用此构造函数)。
原创
如果您通过自己调用 document.RegisterElement()
而不是依赖 Polymer 来注册您的元素,则需要持有对构造函数引用 document.RegisterElement()
returns 的引用,否则您将获胜' 能够创建元素的实例。
因此,您只需要检查您是否已经拥有对构造函数的引用。另见 https://developer.mozilla.org/en-US/docs/Web/API/Document/registerElement