AngularJS仅适用于单页面应用程序(SPA)吗?

我们正在考虑select构build我们正在创build的应用程序的前端,并试图评估一个能够为我们工作的工具,并为我们提供最好的平台。

这是一个Node.js项目。 我们最初的计划是使用Express并沿着这条路线走下去,但是我们决定,在我们开始这个阶段之前,最好查看一下那里的东西。 我们的应用程序有几个方面,我们不相信适合单页模型,因为它们是从应用程序的angular度来看,而不是从一个angular度来看。

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

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


更新2013年7月17日为了让人们保持循环,我将在更新过程中更新这个问题。 我们现在要一起构build所有的东西,我们将看到它的performance如何。 我们已经接触到了一些比AngularJS更有资格的人,并且提出了关于分享大环境的大型应用程序的问题,但是可能在单个页面上工作太大。

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

更新date:2016年6月18日项目濒临悬崖,所以我们从来没有完成太多的工作。 我们最近再次拿起它,但不再使用angular度,而是使用React。 我们仍然使用上一个更新中概述的架构,我们使用express和self包含应用程序,例如,我们有一个express的快速路由服务器,用于提供我们的React聊天应用程序,另外还有另外一个服务器项目应用程序等。 我们有点看它的方式是每个应用程序都是根据其function集合的集合根,它需要能够独立的被认为是一个应用程序本身。 从技术上讲,所有的信息都在那里,它只是基本的expression和你想要使用的客户端应用程序构build善良的任何风格。

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

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

  • 双向绑定
  • 模板
  • 货币格式
  • 多元化
  • 可重用的控件
  • REST风格的API处理
  • AJAX处理
  • 模块化
  • dependency injection

想到这一切“只能用于单个页面的应用程序”是疯狂的。 当然不是..就像说“jquery只适用于带有animation的项目”。

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

起初,我也和Angular一起为“如何”而努力。 然后有一天,我明白了:“这仍然是JavaScript”。 Angular(我的最爱和书https://github.com/angular-app/angular-app )是一个很好的例子。 要记住的最大的事情就是像在任何其他项目中一样加载js文件。 所有你需要做的是确保不同的页面引用正确的Angular对象(控制器,视图等),你是closures和运行。 我希望这是有道理的,但答案是如此简单,我忽略了它。

也许我的经验对别人有用。 我们逻辑分割我们的项目。 一个SPA用于提要,另一个用于处理地图,另一个用于编辑用户configuration文件等。例如,我们有三个应用程序:feed,user和map。 我在分隔的url中使用它,如下所示:

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

这些应用程序中的每一个在应用程序中都有自己的本地路由映射。 我认为这是一个很好的做法,因为每个应用程序只能使用它自己的上下文,并加载它真正需要的依赖关系。 而且,这对于debugging和集成过程来说非常好。

事实上,您可以非常轻松地混合使用SPA应用程序,例如,feed将是带有angularjs应用程序的url,带有reactjs的用户应用程序并映射到backbone.js应用程序。

回答你的问题:

Angular不仅适用于SPA,而且适用于SPA应用,Angular适合各种SPA应用的MPA应用。 但考虑你的url架构不会忘记你的应用程序的SEO可用性。

我也支持这个想法:

项目和应用程序有什么区别? 一个应用程序是一个Web应用程序,它执行某些操作,例如Weblog系统,公共logging数据库或简单的轮询应用程序。 项目是特定网站的configuration和应用程序的集合。 项目可以包含多个应用程序。 一个应用程序可以在多个项目中。

如果你所需要的只是几页与客户端数据绑定,我会去与Knockout和JavaScript命名空间。

淘汰赛是伟大的,尤其是如果你需要简单的向后兼容性,并有相当简单的页面。 如果您使用的是第三方组件,Knockout的自定义绑定非常简单易用。

Javascript namespacing允许你保持你的代码独立和可pipe理。

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

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

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

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

客户端代码可以根据需要简单或复杂。 我尝试将Angular与现有的专有框架整合到一个非常复杂的网站中,这是一场噩梦。 如果你开始新鲜的话,Angular是非常棒的,但它有一个学习曲线,并将你locking在一个非常紧密的工作stream程中。 如果你不遵循它,你的代码会非常快速地纠结。

如果你只是想开发一个SPA,我会说Angular是矫枉过正的。 当然,如果你已经习惯了用它来开发,那就继续吧。 但是如果你对这个框架还不熟悉,只需要开发一个SPA,那么我会用一些更加简单的方法来完成一些自己的function。 我build议看看Vue.jsAurelia.io

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

Aurelia.io ,诚实地说,我不太了解。 但是我偷看了一下,似乎还有一个值得研究的方法,与上面类似。

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