AngularJS只适用于单页应用程序吗?

我们正在寻找构建我们正在创建的应用程序前端的选项,并试图评估一个适合我们的工具,并为我们提供前进的最佳平台。

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

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

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


UPDATE 17 July 2013 为了让大家了解情况,我会在整个过程中更新这个问题。现在我们将把所有东西都构建在一起,我们将看到它的表现如何。我们已经联系了一些在AngularJS方面比我们更有资格的人,并提出了关于拆分共享上下文的大型应用程序的问题,但在一个页面上工作可能太大了

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

这个项目失败了,所以我们从来没有抽出时间做太多的工作。我们最近又开始使用它了,但不再使用angular,而是使用React。我们仍然在使用之前更新中概述的架构,其中我们使用express和self - contains应用程序,因此,例如,我们在express中有一个/chat路由,用于提供React聊天应用程序,我们有另一个路由/projects,用于提供项目应用程序,等等。我们看待它的方式是每个应用程序就其功能集而言都是一个聚合根,它需要能够独立,才能被认为是一个应用程序。从技术上讲,所有的信息都在那里,它只是基本的表达和任何你想使用的客户端应用程序构建的优点。

58816 次浏览

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

除了客户端路由之外,还有很多特性可以让你受益:

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

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

如果它适合你的项目,就使用它。

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

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

https://host/feed/#/top/
https://host/user/#/edit/1/
https://host/map/favorites/#/add/
每个应用程序在应用程序的状态之间都有自己的本地路由映射。 我认为这是一个很好的实践,因为每个应用程序只使用它自己真正需要的上下文和负载依赖项。此外,它对调试和集成过程非常有用

实际上,你可以很容易地混合使用SPA应用程序,例如提要将url与angularjs应用程序,用户应用程序与reactjs和映射到backbone.js应用程序。

针对你的问题:

Angular不仅适用于SPA, Angular也适用于SPA应用,但没有人会费心去构建各种SPA应用的MPA应用。但考虑到你的url架构,不要忘记你的应用程序的SEO可用性。

我也支持这个观点:

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

.应用程序可以在多个项目中

如果你所需要的只是一些带有客户端数据绑定的页面,我会选择Knockout和Javascript namesespaces。

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

Javascript名称空间允许您保持代码的独立性和可管理性。

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

在其他脚本加载后的脚本标记中

<script>
myCo.init();
</script>

关键是,你可以在需要的时候使用任何你想要的工具。需要绑定吗?淘汰赛(或任何你喜欢的)。需要路由吗?js(或任何你喜欢的)。

客户端代码可以简单,也可以复杂。我尝试过将Angular集成到一个非常复杂的站点中,它使用了一个现有的私有框架,结果简直是一场噩梦。如果你刚开始使用Angular,那么它很不错,但它有一个学习曲线,并把你锁在一个非常紧凑的工作流程中。如果你不遵循它,你的代码会很快变得非常混乱。

如果你只是想开发一个SPA,我会说Angular有点过头了。当然,如果你已经习惯使用它进行开发,那就继续吧。但是,如果您是框架的新手,并且只需要开发一个SPA,我建议您使用一些更简单的方法,它本身也有一些好处。我建议查找Vue.jsAurelia.io

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

Aurelia.io,老实说,我知道的不多。但我窥探了一下,这似乎是一个值得研究的选择,类似于上面的。

< p >链接:
https://vuejs.org/
http://aurelia.io/ < / p >