AngularJS只适用于单页应用(spa)吗?
Is AngularJS just for single-page applications (SPAs)?
我们正在寻找构建我们正在创建的应用程序前端的选项,并试图评估一种工具,它将为我们工作,并为我们提供最好的平台。
这是一个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.js或Aurelia.io.
Vue.js使用双向数据绑定、MVVM、可重用组件、简单快速拾取、编写代码少等优点。它结合了Angular和React的一些最好的特性。
蛹。io,老实说,我不太了解。但我已经偷看了一下,这似乎是一个值得研究的替代方案,类似于上面。
链接:
https://vuejs.org/
http://aurelia.io/
- 在我的SPA应用程序中集成Facebook共享的问题
- 错误:$injector:modulerr模块错误(我的第一个SPA应用程序)
- 在非SPA(单页应用程序)中使用Require.js和Backbone
- 识别有角度的spa应用程序页面渲染结束时间
- 在AngularJS中构建SPA应用程序与纯JavaScript - 选择哪种Boostrap进行样式设置
- 在单页应用程序 (SPA) 中处理身份验证的最佳方法
- ADAL - 在SPA应用程序中的Angular JS中使用的JavaScript,用于调用通过APIGEE暴露的第三方
- MVC 5 SPA 应用程序谷歌身份验证令牌处理
- 在哪里存储具有第三方OAuth2服务的SPA / REST应用程序的refresh_token
- 如何开始使用带有Durandal SPA应用程序的Phonegap Build
- Angular SPA应用程序使其他URL仍然具有基于URL编号的突出显示导航栏部分
- Javascript范围在角度SPA应用程序中不起作用
- 如何使用附加到html标签的嵌套ng应用程序将一个基于angularjs的SPA包含到另一个基于angularjs
- Web开发新手:SPA或服务器端应用程序
- 非SPA应用程序中的Backbone.js在浏览历史记录时出现问题
- angular spa应用不能工作ngResource
- 当使用IE兼容模式与剑道UI SPA应用程序时,NodeFilter是未定义的错误
- 如何在每次将模板触发到JavaSrcript SPA应用程序中时执行脚本
- 为什么我的JS SPA应用程序没有从服务URL加载(404)?或者,为什么在我生成的URL中有一个包含用户名的空格?(在
- 在angularjs spa应用程序中,引导下拉菜单不会折叠