javascript - 为什么 Angular 组件选择器可以包含在 html 中?
问题描述
我是 Angular 和 html/html5 的新手,如果我的问题听起来很愚蠢,我很抱歉。下面是截图:
我的问题是:
Q1-paproductform
是ng组件选择器的名字,不是有效的html标签,怎么还能包含在html中?客户端浏览器是如何解释那些无效标签的?
Q2-您可以看到有很多与ng相关的属性,例如_nghost-c0
,html中的自定义属性不是必须是data-xxx(data-_nghost-c0)才有效吗?
解决方案
根据角度文档:
Angular 元素是封装为自定义元素(也称为 Web 组件)的 Angular 组件,这是一种以与框架无关的方式定义新 HTML 元素的 Web 标准。
自定义元素是当前受 Chrome、Firefox、Opera 和 Safari 支持的 Web 平台功能,可通过 polyfill 在其他浏览器中使用(请参阅浏览器支持)。自定义元素通过允许您定义其内容由 JavaScript 代码创建和控制的标签来扩展 HTML。浏览器维护已定义自定义元素的CustomElementRegistry ,它将可实例化的 JavaScript 类映射到 HTML 标记。
A1 - 使用CustomElementRegistry创建自定义 HTML 元素。
创建类后使用该CustomElementRegistry.define()
方法定义自定义元素:
class WordCount extends HTMLParagraphElement {
constructor() {
super();
var wcParent = this.parentNode; // count words in element's parent element
function countWords(node){
var text = node.innerText || node.textContent
return text.split(/\s+/g).length;
}
var count = 'Words: ' + countWords(wcParent);
var shadow = this.attachShadow({mode: 'open'}); // Create a shadow root
// Create text node and add word count to it
var text = document.createElement('span');
text.textContent = count;
shadow.appendChild(text); // Append it to the shadow root
setInterval(function() { // Update count when element content changes
var count = 'Words: ' + countWords(wcParent);
text.textContent = count;
}, 200)
}
}
// Define the new element
customElements.define('word-count', WordCount, { extends: 'p' });
A2 - 使用Element.setAttribute()创建自定义属性。
在以下示例中,setAttribute()
用于设置<button>
.
HTML
<button>Hello World</button>
JavaScript
var b = document.querySelector("button");
b.setAttribute("name", "helloButton");
b.setAttribute("disabled", "");
推荐阅读
- apache-spark - 通过 Simba JDBC 的 Databricks Spark 连接问题
- mysql - Laravel 与 POSTGRESS 。您可能需要添加显式类型转换错误,运算符不存在:
- wordpress - WooCommerce:有什么方法可以拆分或克隆每个产品内的标签机制?
- javascript - 无法使用从安全嵌入式芯片生成的 WebCrypto API (subtlecrypto) 验证原始 UInt8Array ECDSA (secp256r1) 消息/签名/pubkey
- python - 当我通过调用函数打印火车标签时,我得到空列表
- ruby-on-rails - 如何正确地将参数传递给rails表单
- python - 使用 selenium Web 驱动程序提取跨度值
- javascript - 用的地方多的接口存放在哪里
- ruby-on-rails - Ruby on rails,如何在没有关联的情况下查询数据库中的对象?
- node.js - 使用nodejs在lambda函数中发送邮件