用标准网络技术取代角度

时间:2014-10-15 12:04:45

标签: angularjs angularjs-directive web-component ecmascript-6

我正在开发一个项目,该项目在最新的浏览器上使用ECMA 6,可以在1。5年内发货。因此我们认为为什么不使用Web组件,因为Angular 2不可用(这将是ECMA 6)。虽然我们在这里,但是我们可以完全取代Angular而不必回到石器时代吗?

如何替换Angular?

这个名为youmightnotneedjquery.com的网站基本上是关于现代浏览器实际上如何传统上使用jQuery的大部分内容。我很想看到像Angular那样的东西。

我们主要使用四个Angular功能。我可以选择更换它们吗?

  • Angular Directives - > 网络组件
  • Angular Modules - > ECMA 6模块(不完全相同)
  • Angular Routes - > ???
  • 角度双向数据绑定 - > ???

PS。我们不想用类似Backbone或Ember之类的东西替换Angular。我们希望用标准网络技术取代它,但如果我们必须使用小工具来填补空白,我们会考虑它。

2 个答案:

答案 0 :(得分:46)

我在过去3周内一直在研究,结果发现很多人在Angular采取了激烈的改变之后正在考虑另一种选择。幸运的是,升级的W3C Web Components标准实际上已经满足了我们所需要的一切,它现在可以用polyfills from the Polymer project工作。所以回答这个问题:

  • Angular Directives - > 网络组件使用polyfill,直到所有浏览器都支持它。
  • Angular Modules - > ECMA 6模块部分问题通过HTML导入解决。但是,在浏览器支持之前,您也可以使用Traceur
  • Angular Routes - &gt; 该™使用<app-router>的组件。
  • 角度双向数据绑定 - &gt; Polymer在普通标准Web组件的顶部添加了“神奇”图层。这包括许多功能,包括data-binding

+ Plus More

如果您想知道连接文件的构建过程以减少HTTP请求的数量,请查看Addy Osmani's post about Vulcanize。 Spoiler:即将进行的HTTP 2优化也可能不需要它。

许多Angular项目使用Twitter Bootstrap进行布局。聚合物可以做到这一点加上它与Google的Paper elements很好地配合(完全可选但非常棒)。

如果你想让自己熟悉一般的网络组件,这里有一些很好的文章:http://webcomponents.org/articles/

这里有大量的网络组件:http://customelements.io/我不知道它是否会成为一个新的NPM,但列表组件相当令人印象深刻且不断增长。

公开Angular组件的API相对复杂。人们已经提出了从link functionemitting events的各种方法。在Web Components, however, it's really easy中,您的组件可以与外部世界进行交互,实际上您公开的API和事件与<audio>等标准HTML标记没有太大区别。

就像Angular一样,您也可以使用Polymer with Dart

结论

总的来说,我没有看到任何理由使用Angular,除非:

  1. 您在角度方面有巨大的源代码投资,并且不希望将所有内容都移植到标准网站。 (无论如何,Angular 2.0都会弃用您的代码,因此您会遇到Angular 1。*)
  2. 您的团队懒得学习新技术(在这种情况下,网络可能不适合这种态度)。
  3. Angular对它正在做的事情有好处,并有自己的Hype cycle。 Web组件解决了Angular试图解决的许多问题。可能Angular可以作为Web组件的概念证明。但现在是时候继续前进了。网络每天都在重塑自己,moves someone's cheese不可避免。

    我不是说 Polymer是一切的最终答案。充其量只是另一个Angular会在几年内变得毫无用处,但现在是学习和使用它的好时机。虽然W3C standards don't die很容易,但聚合物往往更接近它们。

    RIP Angular 2009-2014

    有一个要素是新的有一个适合该应用的应用

答案 1 :(得分:4)

TLDR:在推出自己的框架之前,认真考虑编写一个几乎与Angular 2.0兼容的Angular 1.3应用程序

好像你已经确定Angular以正确的方式做了很多事情,这就是你试图复制它的原因,所以基本上你会通过组合大量的图书馆来推动自己。除非您有大量的工程时间投入,否则您构建的框架可能是:

  • 轻描述
  • 跨浏览器维护的噩梦和(最糟糕的)
  • 新员工难以学习

如果没有一个框架可以做你想要做的事情,我认为滚动你自己是有道理的,但是通过尝试重新创建Angular你是:

  • 承担了许多已经由专门团队完成的工程工作,可以用于构建产品
  • 让新员工更加困难,因为您必须:
    • 寻找愿意使用本土框架的候选人,而不是在他们可以在其他地方使用的开源框架中发展他们的技能
    • 培训这些员工使用您的框架(除非您的文档成熟,否则祝您好运)

我知道你的问题是如何取代Angular的,但我看到有太多公司走自己的路,并为此付出代价。同样,如果您的预算包含大量的核心资源来构建(并记录和维护)框架,并且您认为如果时间紧迫,如果时间推迟推动,那么角落将会被削减,那么滚动你自己可能有意义。但是,我认为你应该认真考虑阅读如何编写Angular 1.3应用程序,以便它们很容易移植到Angular 2.0并进入Angular路线。只要看看你错过的社区规模:
http://www.airpair.com/js/javascript-framework-comparison