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.js或Aurelia.io 。
Vue.js使用双向数据绑定,MVVM,可重用组件,简单快捷的拾取,更less的代码编写等。它结合了Angular和React的一些最好的特性。
Aurelia.io ,诚实地说,我不太了解。 但是我偷看了一下,似乎还有一个值得研究的方法,与上面类似。
- Angular JS如何与Google Closure相关?
- 如何在ngRepeat数组之间的AngularJS中推送对象
- 将forms传递给指令
- Django Rest框架中的用户authentication+ Angular.js Web应用程序
- AngularJS 1.3或AngularJS 1.2.x
- Angularjs:错误:参数'HomeController'不是一个函数,得到了undefined
- angularjs ui-router – 如何构build跨应用程序的全局主状态
- 我应该使用哪种方法来手动引导我的AngularJS?
- AngularJSauthentication+ RESTful API