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

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

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

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


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

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

UPDATE 18 June 2016 The project fell of a cliff, so we never got round to getting too much done. We have picked it up again recently, but are no longer using angular and are using React instead. We are still using the architecture outlined in the previous update, where we use express and self contain apps, so for example, we have a /chat route in express that serves up our React chat app, we have another route /projects that serves up the projects app and so on. The way we are kinda looking at it is each app is an aggregate root in terms of its feature set, it needs to be able to standalone for it to be considered an app in itself. Technically, all the information is out there, its just basic express and whatever flavour of client side app building goodness you want to use.


当前回答

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

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

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

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

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

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

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

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

其他回答

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

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

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

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

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

I struggled with the "how" at first with Angular as well. Then one day it dawned on me: "It is STILL javascript". There are a bunch of examples on the ins-and-outs of Angular (one of my favorites along with the book https://github.com/angular-app/angular-app). The biggest thing to remember is to load in the js files just like you would in any other project. All you have to do is make sure the different pages reference the correct Angular object (controller, view, etc.) and you are off and running. I hope this makes sense, but the answer was so simple I overlooked it.

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

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

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

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

也许我的经验对别人有用。我们按逻辑划分我们的项目。一个用于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,那么它很不错,但它有一个学习曲线,并把你锁在一个非常紧凑的工作流程中。如果你不遵循它,你的代码会很快变得非常混乱。