web components是不是web的未来

桥豆麻袋 2024-05-24 11:10:12
最佳回答
随着各式各样的用户需求,浏览器的原生组件已经无法满足需求。web组件也就变得越来越重要。我们将以自定义一个传统三方插件为例来介绍web组件。首先,需要引用插件的css和j**ascript资源:<link rel="stylesheet" type="text/css" href="my-widget.css" /><script src="my-widget.js"></script>接下来,我们需要向页面中添加占位符。<div data-my-widget></div>最后,我们需要使用脚本来找到并且实例化这个占位符为web组件。// 使用 jquery 初始化组件$(function() {$('[data-my-widget]').mywidget();});通过以上是三个基本步骤。已经完成了在页面中添加了自定义插件,但是浏览器无法确定自定义组件的生命周期,如果通过以下方式声明则使自定义组件生命周期变得清晰了。el.innerhtml = '<div data-my-widget></div>';因为这不是一个内置的组件,我们现在必须手动实例化新组件,$(el).find('[data-my-widget]').mywidget();避免这种复杂设置方法的有效方式是完全抽象dom交互。不过,这个动作也比较复杂,需要创建框架或者库来自定义组件。面临的问题组件一旦被声明,占位符已经被替代为原生的html标记:<div data-my-widget><div class="my-widget-foobar"><input type="text" class="my-widget-text" /><button class="my-widget-button">go</button></div></div>这样做的弊端是,自定义组件的标记和普通html组件的标记混杂在一起,没有清晰的分割和封装。这就不可避免的会出现命名及样式等冲突。web组件的产生随着三方web组件的发展,它已经成为了web开发不可或缺的部分:<!—导入: --><link rel="import" href="my-widget.html" /><!—使用:--><my-widget />在这个实例中,我们通过导入html来添加组件并且立即使用。更重要的是,因为<my-widget />是浏览器原生支持的组件,它直接挂在浏览器的生命周期中,允许我们像添加原生组件一样添加三方组件。el.innerhtml = '<my-widget />';// 插件当前已经被实例化当查看这个组件的html 源码,你会发现它仅仅是一个单一的标签。如果启用浏览器shadow dom 特性,才可以查看标签内的组件,你将会发现一些有趣的事情,当我们谈论web组件时,我们不是在谈论一门新技术。web组件最初的目的是给我们封装能力,它可以通过自定义组件和shadow dom 技术来实现。所以,接下来,我们将着重介绍下这两项技术。介绍以上两个技术之前,我们最好先梳理下已知浏览器原生组件。已知的html组件我们知道组件可以通过html标记或j**ascript来实例化:使用标记实例化:<input type="text" />document.createelement('input');el.innerhtml = '<input type="text" />';使用j**escript实例化:document.createelement('input') document.createelement('div')添加带有属性的html标签:// 创建带有属性的input标签...el.innerhtml = '<input type="text" value="foobar" />';//这时value属性已经同步el.queryselector('input').value;组件可以响应属性的变化:// 如果我们更改value 属性值input.setattribute('value', 'foobar');//属性值会立即更改input.value === 'foobar'; // true组件可以有内部隐藏的dom结构:<!—使用一个input实现复杂的日历功能--><input type="date" /> // 尽管其内部结构比较复杂,但是已经封装成为一个组件dateinput.children.length === 0; // true组件可以使用子组件:<!—可以给组件提供任意个 'option' 标签--><select><option>1</option><option>2</option><option>3</option></select>组件可以为其子组件提供样式:dialog::backdrop {background: rgba(0, 0, 0, 0.5);}最后,组件可以有内置样式。和自定义插件不同,我们不需要为浏览器的原生控件引用css文件。有了以上的了解,我们已经具备了解web组件的基础。使用自定义组件和shadow dom,我们可以在我们的插件中定义所有这些标准行为。自定义组件注册一个新组件也比较简单:var myelement = document.reg**ter('my-element');// 'document.reg**ter' 返回一个构造函器你也许注意到上面的自定义组件名称包含一个连接符。这是为了确保自定义组件名称不和浏览器内置组件不冲突。现在<my-element />这个组件具备了原生组件的特性,所以,自定义组件也同样可以进行普通的dom操作:document.create('my-element');el.innerhtml = '<my-element />';document.create('my-element');构建自定义组件当前,这个自定义组件仅仅有框架,而没有内容,下面让我们向其中添加一些内容://我们将提供'document.reg**ter'的第二个参数:document.reg**ter('my-element', {prototype: object.create(htmlelement.prototype, {createdcallback: {value: function() {th**.innerhtml = '<h1>element created!</h1>';}}})});在这个例子中,我们设置自定义组件的prototype,使用object.create 方法创建一个继承于htmlelement的对象。在这个方法中修改该组件的属性 innerhtml。我们定义了createdcallback方法,在每次声明实例时调用。你同样可以有选择性的定义attributechangedcallback、 enteredviewcallback 和leftviewcallback等方法。目前为止我们实现了动态修改自定义组件内容的功能,我们仍然需要提供自定义组件的封装方法,用于隐藏其内部组件。使用shadow dom实现封装我们需要完善下createdcallback方法。本次,除了修改innerhtml之外,我们添加一些额外的操作:createdcallback: {value: function() {var shadow = th**.createshadowroot();shadow.innerhtml = '<h1>shadow dom!</h1>';}}在这个例子中, 你会注意到‘shadow dom!’,但是查看源码时你会发现只有空白的<my-element /> 标签而已。这里使用创建shadow root 方法替代了直接修改页面。shadow root中的任何组件,是肉眼可见的,但是和当前页面的样式和dom api相隔离。这样就实现了自定义组件是一个独立组件的假象。添加“轻量级dom”目前为止,我们的自定义组件是空标签,但是如果向其中添加内部组件会出现什么现象呢?我们假设自定义组件包含的节点如下,<my-element>这是一个轻量级 dom。<i>hello</i><i>world</i></my-element>一旦针对于这个组件的 shadow root 被创建,它的子节点不再存在。我们这些隐藏的子节点封装为轻量级dom节点。如果禁用了 shadow dom,上面这个例子仅仅会显示为:这是一个轻量级 dom‘hello world’。当我们在createdcallback方法中设置 shadow dom后,我们可以使用新增内容分配轻量级dom组件到shadow dom 中。createdcallback: {value: function() {var shadow = th**.createshadowroot();// 子组件'i' 标签现在已经消失了shadow.innerhtml =‘轻量级 dom 中的 "i" 标签为: ' +'<content select="i" />';//现在,在 shadow dom 中只有 'i' 标签是可以见的。}}封装样式shadow dom 最重要的作用是创建了和当前页面隔离的web组件,使web组件不受当前页面样式和j**escript脚本的影响。createdcallback: {value: function() {var shadow = th**.createshadowroot();shadow.innerhtml ="<style>span { color: green }</style>" +"<span>i'm green</span>";}}反之,在 shadow dom 中定义的样式也不会影响之外的标签样式。<my-element /><span>i'm not green</span> 20210311
汇率兑换计算器

类似问答
  • 迪普设备的web界面登陆不了,怎么办?
    • 2024-05-24 02:37:42
    • 提问者: 未知
    1)检测和设备的连通性,地址是否正常,网络是否有地址冲突 2)换用https/http的方式尝试登陆 3)命令行确认设备登陆的https或http服务的端口是否被修改或被目的nat冲突。4)命令行确认是否做了web访问限制,只允许特定ip登陆 5)命令行确认尝试登陆的接口是否做了服务接口限制,或换一个业务接口尝试登陆
  • web前端发展方向是什么?
    • 2024-05-24 13:10:28
    • 提问者: 未知
    web前端技术有一些江湖气,知识点过于琐碎,技术价值观的博弈也难分伯仲,即全局的系统的知识结构并未成体系,这些因素也客观上影响了“正统“前端技术。1,明白前端干什么。以前就可能是仅仅地切图,把设计变成代码。但是现在随着webapp兴起,以及利用web构建富客户端,包括更多交互丰富的离...
  • 什么是web 3.0?
    • 2024-05-24 11:10:43
    • 提问者: 未知
    什么是web3.0 1:网站内的信息可以直接和其他网站相关信息进行交互和倒腾,能通过第三方信息**同时对多家网站的信息进行整合使用。2:用户在互联网上拥有自己的数据,并能在不同网站上使用。3...
  • app 设计与 web 设计的主要区别是什么?
    • 2024-05-24 21:57:48
    • 提问者: 未知
    鉴于在中文语境中,一些英语名词是直接拿来使用,并无统一标准的中文...准备好接受五位数的报价,并且在开始开发前弄清楚投资回报率和对用户的价值,以决定应用程序是否可行。...
  • uc web 开发商是谁
    • 2024-05-24 01:30:40
    • 提问者: 未知
    uc浏览器开发团队 优视动景(ucweb)是**领先的移动软件和综合服务提供商,其提供的核心产品优视浏览器能运行在绝大多数的手机终端上;公司亦是**第一家在手机浏览器领域拥有核心技术及完整知识产权的公司。公司自2004年创立以来,始终以卓越的市场前瞻力和技术创新力推动着**移动互联网领域的发展...
  • web前端的前途怎么样?
    • 2024-05-24 09:41:29
    • 提问者: 未知
    web前端开发技术主要包括三个要素:html、css和j**ascript!它要求前端开发工程师不仅要掌握基本的web前端开发技术,网站性能优化、seo和服务器端的基础知识,而且要学会运用各种工具进行辅助开发以及理论层面的知识,包括代码的可维护性、组件的易用性、分层语义模板和浏览器分级支持等。...
  • 常见的web安全漏洞有哪些?
    • 2024-05-24 06:45:51
    • 提问者: 未知
    web服务器安全web服务器操作系统的漏洞安全。比如windows server的漏洞,linux系统(ubuntu、centos等)漏洞。对于web服务器,时刻关注系统安全,及时打好补丁,升级相关的软件到最新版本。web应用中文件的权限安全。windows server实施用户组权限策略,单个文件有读写权限设置,一般不存在网页文件权限需要修改的问题。linux系统实行用户权限策略,对每个文件都有...
  • 什么是web漏洞扫描
    • 2024-05-24 17:30:40
    • 提问者: 未知
    可以检测出你网站中存在的漏洞 然后提示你 哪边需要加固一下什么的 主要是为了提高你网站的安全性吧,
  • 如何进行web漏洞扫描
    • 2024-05-24 20:32:35
    • 提问者: 未知
    首先根据需要选择合适的扫描器,有条件的公司建议至少选择2款以上的扫描器进行交叉确认,避免因某款扫描器漏报导致漏洞没扫到而被外界利用的情况发生其次根据扫描器的引导,定期下发扫描任务,现在的扫描器均做的都很人性化,比如有一款叫网藤风险感知的产品,可以通过输入扫描目标(域名或ip)选择扫描策略即可通过下发任务的形式完成漏洞扫描。任务结束后会有一份详细的扫描报告
  • j**ascript for web developement缩写是jfwd还是jwd好,“for“是不是**?
    • 2024-05-24 08:18:45
    • 提问者: 未知
    英文名称首字母缩写中,连词,介词不必写出,并不是主要信息词。推荐几个例子,看下就明白了哦。bfa boao forum for asia 博鳌亚洲论坛 bie bureau of international expositions 国际展览局 b** bank for international settlements 国际清算银行 cfc common fund for commodities ...
汇率兑换计算器

热门推荐
热门问答
最新问答
推荐问答
新手帮助
常见问题
房贷计算器-九子财经 | 备案号: 桂ICP备19010581号-1 商务联系 企鹅:2790-680461

特别声明:本网为公益网站,人人都可发布,所有内容为会员自行上传发布",本站不承担任何法律责任,如内容有该作者著作权或违规内容,请联系我们清空删除。