【问题标题】:Why Polymer Project (Web Components) isn't famous yet in comparison to other approach?与其他方法相比,为什么 Polymer Project(Web 组件)还没有出名?
【发布时间】:2024-04-21 07:45:02
【问题描述】:
Polymer 版本 2 已经有一段时间了,但是
-
很少人谈论它
-
很少开发者在他们的博客中写到它
-
很少开发者分享他们的工作流程和经验
Polymer Project 由 Google 提供支持,该团队似乎拥有无可挑剔的理念。
除了缺乏浏览器支持之外,Polyfills 仍然可以正常工作。
顺便说一句,尽管 Web 组件是 Web 的标准,但似乎人们不喜欢打开它并在它上面工作。
对我来说有一个重要的为什么,应该有一个解释。
我认为这与 * 有关但是我知道很多人不喜欢这种问题。
【问题讨论】:
标签:
html
polymer
components
web-component
custom-element
【解决方案1】:
首先,自从 Polymer 2 于 2017 年 5 月正式发布以来,它实际上是一项非常新的技术。
其次,它得到谷歌的支持并不一定是优势:想要依赖这家公司产品的网络开发者可能更喜欢 Angular,它也是谷歌推广的,而且更加成熟和有名。
第三,它基于Web组件标准这一事实也不是优势:
第四,为 UI 元素选择的 Material Design 风格可能并不适合每个人的口味。
第五,版本 2 与版本 1 不完全兼容,这可能会给新手带来一些困惑,也让那些投资于临时版本 1 的人有些失望。
最后,人们可能会质疑 Polymer 是一个长期框架,还是只是一种支持 Google 提出的早期标准(自定义元素和 Shadow DOM)发布并促进其采用的方式。
PS
以上几点只是假设。
就个人而言,我在几个月内开始使用 Polymer 1,然后我改用 Vanilla 自定义元素。
【讨论】:
-
我有几乎相同的感觉或假设。此外,4) 材料设计并非 Polymer 独有。我也在考虑从 Polymer 支持的组件转移到 vanilla。这在某种程度上是我从上次 Polymer 峰会上得到的信息——Polymer 的目标是缩小平台和应用程序之间的差距,并将自身减少到零。让我们看看即将在哥本哈根举行的聚合物峰会的下一步是什么,summit.polymer-project.org/schedule
【解决方案2】:
因为除了材料设计或引导程序或其他设计框架之外更难实现
bootstrap 很容易实现,与它无关,例如为每个组件添加 javascript,每个组件都有自己的样式
但毕竟聚合物是一个很好的项目,谁有更好的设计技能和引导程序,其他人不需要更高的设计技能
【解决方案3】:
尽管 Polymer 越来越接近原生的 Vanilla Web 组件,但它们仍未在所有浏览器中得到完全支持的事实使得它实际上并不实用。
我个人喜欢这样的想法,即 this(Polymer) 可能会以某种无缝转移到原生组件的方式结束。
我在与其他开发人员的谈话和对话中还了解到,React 在美国要大得多,而欧洲的开发人员倾向于选择 Polymer。为什么会这样我真的不知道,但我相信有很多因素会影响它,并且无法确定这些库之一的特定缺点或优点。
正如 Supersharp 已经提到的,与 Angular 和 React 等其他库相比,Polymer 仍然很新。但是开发者社区每年都在增长,这一点在哥本哈根的上一届 Polymer 峰会上得到了特别强调,那里的一切都是关于“平台”的。结果证明这是社区、网络标准和周围的一切,而不是我觉得非常愉快的对聚合物的完全崇拜。
最后要添加的内容。
虽然 Polymer 可能得到 Google 的支持,但从事它的团队相对较小。 Youtube 刚刚改用 100% 聚合物,我了解到实现这一目标的团队比开发平台的实际团队要大得多。(我们在这里谈论的是少数人)。
【解决方案4】:
我在 2017 年中期使用 Polymer 2 进行了一个小型演示项目(RC2,不是最终版本),非常好用且令人愉快。在我看来,它比 Angular (1.6) 更容易,但我没有太多经验。
专业版
- 我喜欢每个问题的组件的想法
- 易于拆分数据(属性)和模板
- 轻松使用事件
骗子
聚合物 2 示例元素
<dom-module id="input-array-element">
<template>
<h3>Inputs Array</h3>
<template is="dom-repeat" items="{{technology}}">
<input type="text" value="{{item.label::input}}">[[item.label]]<br/>
</template><br>
</template>
<script>
class InputArrayElement extends Polymer.Element {
static get is() { return 'input-array-element'; }
static get properties() {
return {
technology : {
type: Array,
value: [
{id:"php", label:"PHP", selected:false},
{id:"js", label:"Javascript", selected:false},
{id:"html", label:"HTML", selected:false},
{id:"css", label:"CSS", selected:false},
],
notify: true
}
}
}
ready() {
super.ready();
this.addEventListener("technology-changed", function(e){
console.log(e);
});
}
}
window.customElements.define(InputArrayElement.is, InputArrayElement);
</script>
</dom-module>