AngularJS只适用于单页应用(spa)吗?

Is AngularJS just for single-page applications (SPAs)?

本文关键字:spa 应用 适用于 单页 AngularJS      更新时间:2023-09-26

我们正在寻找构建我们正在创建的应用程序前端的选项,并试图评估一种工具,它将为我们工作,并为我们提供最好的平台。

这是一个Node.js项目。我们最初的计划是使用Express并沿着这条路线走下去,但我们决定在开始这一阶段之前,最好还是回顾一下那里有什么。我们的应用程序有几个我们认为不适合单页模型的地方,因为它们是从应用程序的角度相关的,而不是从视图的角度。

我们已经看到了一些我们可以用来构建客户端的框架,如Backbone.js, Meteor等,还有AngularJS。

这可能是一个相当明显的问题,但我们似乎无法破译AngularJS是纯粹用于单页应用程序,还是可以用于多页应用程序,比如Express。


2013年7月17日更新为了让大家了解情况,我将在整个过程中更新这个问题。我们现在将把所有的东西都放在一起,我们将看看它的表现如何。我们已经联系了一些比我们更精通AngularJS的人,他们提出了关于拆分大型应用程序的问题,这些应用程序共享上下文,但在单个页面上可能太大了。

共识是,我们可以提供多个静态页面,并创建只与这些页面一起工作的AngularJS应用程序,有效地创建一个SPA集合,并使用标准链接将这些应用程序链接在一起。现在我们的用例非常具体,因为我们的解决方案有几个应用程序,正如我所说的,我们将首先尝试单个代码库,并从那里进行优化。

更新2016年6月18日项目跌入悬崖,所以我们没有时间做太多的工作。我们最近又捡起了它,但不再使用angular,而是使用React。我们仍然在使用之前更新中概述的架构,在这里我们使用express和self - contained应用程序,因此,例如,我们在express中有一个/chat路由来服务我们的React聊天应用程序,我们有另一个/projects路由来服务项目应用程序,等等。我们看待它的方式是,每个应用都是一个聚合根,就其功能集而言,它需要能够独立,因为它本身被认为是一个应用。从技术上讲,所有的信息都在那里,它只是基本的表达和任何你想使用的客户端应用程序构建功能。

一点也不。你可以用Angular构建各种各样的应用。客户端路由只是其中的一小部分。

你有一个大的特性列表,将有利于你的客户端路由之外:

    双向绑定
  • 模板
  • 货币格式
  • 多元化
  • 可重用控件
  • RESTful api处理AJAX处理
  • 模块化
  • 依赖注入

想到所有这些"只能在一个单页应用程序中使用"真是太疯狂了。当然不是……这就像是在说"Jquery只适用于带有动画的项目"。

如果它适合您的项目,请使用它。

刚开始使用Angular时,我也纠结于"如何"。然后有一天我明白了:"它仍然是javascript"。有很多关于Angular的细节的例子(我最喜欢的书之一https://github.com/angular-app/angular-app)。要记住的最重要的事情是加载js文件,就像在任何其他项目中一样。你所要做的就是确保不同的页面引用了正确的Angular对象(控制器、视图等),然后你就可以开始运行了。我希望这是有意义的,但答案太简单了,我忽略了它。

也许我的经验会对别人有用。我们在逻辑上划分了我们的项目。一个SPA用于提要,另一个用于处理地图,另一个用于编辑用户配置文件等等。例如,我们有三个应用程序:feed, user和map。我在分隔的url中使用它,像这样:

https://host/feed/#/top/
https://host/user/#/edit/1/
https://host/map/favorites/#/add/

这些应用程序中的每个都有自己的本地路由映射。我认为这是一个很好的实践,因为每个应用程序只使用它自己真正需要的上下文和加载依赖项。而且,它对于调试和集成过程非常有用。

事实上,你可以很容易地制作一个SPA应用的混合,例如,feed将是angularjs应用的url,用户应用将是reactjs,并映射到backbone.js应用。

关于你的问题:

Angular不只是为SPA服务的,Angular在SPA应用中运行得又好又快,但没有人会为构建各种SPA应用的MPA应用而烦恼。但是考虑到你的url架构,不要忘记你的应用程序的SEO可用性。

我也支持这个想法:

项目和应用程序的区别是什么?一个应用程序就是一个网络做一些事情的应用程序——例如,一个Weblog系统,一个数据库公共记录或一个简单的投票应用程序。一个项目是一个集合特定网站的配置和应用程序。一个项目可以包含多个应用程序。一个应用程序可以在多个项目中。

如果您需要的只是几个带有客户端数据绑定的页面,那么我会选择Knockout和Javascript命名空间。

Knockout非常好,特别是当您需要简单的向后兼容性和相当直接的页面时。如果你使用的是第三方组件,那么Knockout的自定义绑定很简单,也很容易使用。

Javascript名称空间允许您保持代码的分离和可管理。

var myCo = myCo || {};
myCo.page = {
    init: function(){ ... },
    ...
}

在其他脚本加载后的script标签中

<script>
    myCo.init();
</script>
关键是,当你需要的时候,你可以使用任何你想要的工具。需要绑定吗?击倒(或任何你喜欢的)。需要路由吗?Sammy.js(或者任何你喜欢的)。

客户端代码可以像你想要的那样简单或复杂。我曾尝试用现有的专有框架将Angular集成到一个非常复杂的站点中,结果简直是一场噩梦。如果你是从头开始,Angular是很棒的,但它有一个学习曲线,把你锁定在一个非常严格的工作流程中。如果你不遵循它,你的代码很快就会变得非常混乱。

如果你只是想开发一个SPA,我想说Angular是多余的。当然,如果你已经习惯了使用它进行开发,那就继续吧。但是,如果您是框架的新手,并且只需要开发一个SPA,那么我会选择一些更简单的东西,并附带一些自己的好处。我建议查看Vue.jsAurelia.io.

Vue.js使用双向数据绑定、MVVM、可重用组件、简单快速拾取、编写代码少等优点。它结合了Angular和React的一些最好的特性。

蛹。io,老实说,我不太了解。但我已经偷看了一下,这似乎是一个值得研究的替代方案,类似于上面。

链接:
https://vuejs.org/
http://aurelia.io/

相关文章: