Angular.js 与 Elm 相比有何优缺点?

2024-03-07

我正在考虑在浏览器中进行一些反应式编程并比较 angular.js (http://angularjs.org/ http://angularjs.org/)与榆树(http://elm-lang.org/ http://elm-lang.org/).

各自的相对好处/问题是什么?


我认为他们是不同的野兽,IMO,尽管他们确实有尽可能声明性的目标,以及“嘿,让我们做事”的态度我们应该如何做".

现在,与AngularJS你仍然处于“熟悉”的领域。意思是,你在这里写一些标记,在那里写一些 JS,然后你提供它。与平常相同的工作流程。据我所知,AngularJS 的“创新”在于它extendsHTML 具有附加元素类型,以便您可以declare你的应用程序的很多方面和行为都在标记中,然后它的 JS 库包含必要的机制来为你提供模板、路由、数据绑定、表单验证、本地化等(...写这篇文章让我想知道是否也许 AngularJS 有点臃肿。),这使得它成为一个非常完整的 Web 应用程序开发框架。它促使您以声明式风格编写代码。

With Elm你真的进入了新的领域(如果你有“典型的” HTML/JS 前端开发背景)。这是进行(和思考)GUI 开发的不同方式。您将使用一种全新的语言进行编写 - 专门用于以函数响应式编程方式创建 GUI - 理想情况下您永远不会处理(至少不会直接)任何传统的 DOM API。 Elm 附带了一种“标准库”,它为您提供了随时间创建和操作图形/文本/等的工具。

您的 Elm 语言代码将以完全声明性的方式描述您希望 GUI 在时间推移和事件(用户输入等)发生时的外观和行为。然后,它会将其全部编译为 HTML/JS/CSS,以便在浏览器上运行。

榆树也很年轻。这是否是一个缺点取决于您和您的需求。

我想对我来说,选择 AngularJS 与我们在 JS 世界中习惯的“嘿,让我们尝试一下这个 JS 库/框架”的流程是一样的。您获取 lib 文件,将它们添加到您的项目中,然后开始使用其 API。而与Elm,您必须开始以不同的方式处理您的工作流程和问题解决方案。

AngularJS 为您提供了很多结构,并且它与 Backbone.js 等不同,但归根结底,如果您想做一些高级 GUI 和图形行为,那么使用 AngularJS 您又要编写大量代码如果您使用 Elm,则无需编写管道样板内容。

另一方面,如果您必须开发和发布大型网络应用程序现在,对于到目前为止我们在网络上使用的常用 GUI 小部件,我倾向于选择 AngularJS,因为它更稳定。

话虽如此,我认为 Elm 是目前前端开发世界中最有趣、最有前途的事物。而且,如果我今天必须开发和发布一些图形密集型的东西,我would选择 Elm,因为人们可以用很少的几行代码来完成非常复杂的 GUI 工作。但我必须首先了解它的思维方式,并考虑到它还很年轻,并且将其与现有 JS 前端代码库集成可能并不容易,甚至不可能。

Edit:

截至 2015 年 3 月,Elm 更加强大,并且有很棒的工具(我想到了时间旅行调试器)。

Angular 仍然是,嗯,更多的是相同的。我应该指出,Angular 的方法及其每当模型更改时都会发生大量事情的方法(“双向数据绑定”)使其完全不适合基于浏览器的游戏等事物,而Elm 擅长游戏和需要良好性能的高级 GUI 内容。此外,Elm 现在有一个快速(使用虚拟 dom diff'ing 方法)HTML 库,供您需要使用 HTML 进行交流时使用。

我对 Elm 的不满是,它的类型系统并不像 e.g. 那样具有表现力。哈斯克尔的。有些人可能认为这是在要求奢侈,但事实恰恰相反,这是失去表达基本功能的能力。尤其是我们这些经验丰富的 JS 程序员,会遭受表达能力不够的静态类型系统的困扰,因为这意味着我们习惯在 JS 中轻松表达的多态代码在 Elm 中会变成类型错误,因为缺乏例如2 级类型。

幸运的是,Elm 中缺少的所有“愿望清单”功能都不存在,因为持续讨论关于他们和他们的选择。因此,可以肯定的是,它们(或最好的替代方案)最终会使用该语言。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular.js 与 Elm 相比有何优缺点? 的相关文章

  • 如何在AngularJS中的控制器之间共享数据

    我目前正在尝试学习 angularJS 但在控制器之间访问数据时遇到问题 我的第一个控制器从我的 api 中提取货币列表并将其分配给 scope currencies 当我单击编辑时 应该发生的情况是它切换使用另一个控制器的视图 现在 当使
  • 在 angularjs 模块初始化期间有条件地注入依赖项

    我有一个角度模块 我想有条件地将依赖项注入其中 IE var myapp angular module myapp ngRoute myappcontroller ngGrid I want to include ngGrid only i
  • Webpack 和 Angular HTML 图像加载

    我一直对 webpack 和 Angular 感到头疼 这可能有一个简单的答案 但我无法弄清楚 我已经阅读了堆栈溢出中关于这个主题的几乎所有答案 但都无济于事 我有一个像这样的 html 页面 还有其他包含图像的模板 img
  • 模型不是 AngularJS 中输入的日期对象

    使用 AngularJS 我试图使用输入显示日期type date
  • AngularJS with Grunt - 连接到另一台服务器

    我使用 grunt bower 和 yeoman 创建了一个 AngularJS 应用程序 我猜想 Gruntfile js 在 2014 年 1 月之后发生了变化 不确定 这是我的gruntfile js Generated on 201
  • 角度 ng-repeat 根据条件添加样式

    我在 div 列表上使用 ng repeat 并且在渲染此 div 的 json 中手动添加项目 我需要定位我在 json 中添加的最后一个 div 它会自动在屏幕上渲染 即 couse 光标所在的位置 其余部分保持在相同位置 但没有给出渲
  • console.log 未显示正确的值[重复]

    这个问题在这里已经有答案了 我正在尝试控制台一个对象 尽管它没有抛出任何错误 但我想要的结果在一段时间后显示 但我无法检索它 它显示一个 i 图标 上面写着 刚刚评估了下面的值 但我无法获取该值 OUTPUT Promise state s
  • Angular js 服务器端过滤器和分页

    我有几个输入字段 我们可以使用带有搜索名称的输入字段作为示例 当有人在该字段中输入内容时 我希望能够过滤对象的结果 但我想做过滤器服务器端而不是客户端 我有一个包含大量记录的数据库 因此我不想返回所有记录并在客户端进行过滤 这确实会减慢速度
  • 从 JSON 文件注入的编译指令 AngularJS

    希望有人能帮助我应对这一挑战 我使用以下命令从服务器请求 JSON 数据 http get 来自服务器的数据返回一个对象 对象中的一个值包含 HTML 标记 该标记使用以下方式注入到页面中 div div 在标记内 有一个名为的自定义指令
  • Angular JS - 如何在模型更改时制作动画?

    当 currentVertical 改变时 我试图做一个很好的淡出 淡入过渡 在淘汰赛中 这很简单 但我在这里无法弄清楚 请帮忙 以下代码显示一个 UL 列表 当单击 LI 元素时 该列表 绑定 到 scope currentVertica
  • Jasmine-jQuery loadFixtures 未定义

    我对整个茉莉花的事情仍然很陌生 在过去的几个小时里我陷入了这个问题 我尝试使用 loadFixture 加载外部夹具文件 我使用 Jasmine 2 0 0 和 Jasmine jQuery 2 0 5 ReferenceError loa
  • Angular,当任何资源处于待处理状态时显示加载

    我已经编写了一段代码来显示加载器 div 当任何资源处于待处理状态时 无论它是通过 http get 还是路由 ng view 获取的 我不仅仅想要信息 如果我变坏了 流程处理服务 app service flowHandler funct
  • Angular 模态对话框最佳实践

    与不具有动态内容的对话框相比 创建具有动态内容的模式对话框的最佳实践是什么 例如 我们有一些模式表单接受表单元素列表 并具有提交 取消功能 此外 还有一些模式对话框仅显示确认 确定类型的操作 我见过很多人说对话框应该是传递到控制器的服务 但
  • 为什么我无法将 $location 注入到我的 config() 中?

    为什么这会给我一个错误 angular module app config function routeProvider locationProvider httpProvider location 未捕获的错误 未知的提供商 来自应用程序
  • ng-include 和 ng-view 不同时加载

    下面是我的应用程序的结构 很简单 页眉和页脚是非常小的文件 而主页上的 ng view 要大得多 当我进入该页面时 我注意到了这一点 首先加载两个 ng include 然后 ng view 出现 页脚被推到底部 页脚闪烁大约 0 1 秒
  • Elasticsearch 跨多个索引搜索 - 忽略不存在的索引

    我有弹性集群 其中我的索引包含当前日期 例如 example idex 2016 07 26 gt exists example idex 2016 07 25 gt exists example idex 2016 07 24 gt do
  • Angular Material 日期选择器选择的默认日期

    这对我的日期选择器有帮助 http demo agektmr com datalist 现在在这个date picker我想要默认选择今天的日期 谁能帮我如何设置默认日期 谢谢 在我用过的有角材料中this http demo agektm
  • Elm 调试器侧边栏太小。如何扩展呢?

    我有很长的消息 除了最后一部分之外 它们都是相同的 正如您在下面看到的 我无法区分 它们实际上是不同的 I ve open up the debugger with chrome and i saw this 但这在页面重新加载时不起作用
  • 我如何在 AngularJS 中监听点击并按住的情况?

    我制作了一个时间计数器 您可以通过单击按钮来增加或减少时间 然而 我希望当我单击并按住按钮时 时间的价值会不断攀升 所以目前如果你看到我的Plunkr http plnkr co edit BxX9x5zYFMXVqt5JsN1F p pr
  • AngularJS - 设置下拉列表的选定值不起作用

    我在这里复制了我的问题 http jsfiddle net U3pVM 2840 http jsfiddle net U3pVM 2840 正如标题所示 我无法设置使用 ng options 填充的选择的选定值 我已经搜索并尝试了我找到的所

随机推荐