2013-02-23 73 views
4

我想围绕AngularJS包裹我的头。我很喜欢它,但一个核心概念似乎在逃避我 - 模型在哪里?AngularJS模型

例如,如果我有一个应用程序,例如,显示多个事务列表。一个列表向服务器查询符合某些标准的分页交易集合,另一个列表使用不同的标准,但可能有一些交易符合两个条件并最终在两个列表中。现在:

  1. 出现在两个列表中的事务应该是两个范围中的SAME对象,对不对?这不是数据绑定的大问题,所以一个地方的更新会被镜像到另一个地方吗?

  2. 事务可能具有复杂的行为,抽象原始服务器API请求,要求后续查询服务器以收集更多数据,监视自己是否有变化并将自己标记为脏,所有这些事情都去了哪里?

  3. 列表本身需要知道事务何时被删除,因此在一个列表中删除的同一事务将从另一列表中消失。

  4. 我们可能想缓存一些客户端存储风格的交易?

所以再次提出这个问题:所有这些都去了哪里?它是否都被嵌套在$ rootScope中并且由控制器控制?委托给一个服务?

这里的任何方向,无论多么模糊,都不胜感激。

+0

问题标题似乎讨论一个普遍的概念,而内容描述比例更特殊的情况。 – 2013-08-18 23:20:02

回答

8

有关Angular的一点是它将模型留给你。您不必扩展一些内置对象来使其工作,它可以是任何你想要的对象。 a)是的,但正如我所说,这取决于你。如果您愿意,您甚至可以使用Backbones模型实现。

b)可能在你的模型对象中。 Angular提供您可以使用的资源服务。你可以在这些资源上定义你自己的方法,所以这将是一个很好的起点。

c)您的意思是GUI部分或业务逻辑? Angular为你处理GUI。只需实现从列表中删除事务的函数,Angular将为您重新渲染它。

d)再次,这是由你来实现或使用库。 Angular主要是一个GUI框架,对你的模型/持久层几乎没有看法。

对于你的最后一个问题;你会将大部分逻辑放在服务中。你的Angular控制器将被注入他们需要的服务,并通过范围向视图公开功能。您应该尽可能避免向根作用域添加内容,因为它们在模板中基本上是全局的。

+0

很好的答案!我有点像解耦,但是重新实现这么多角度的功能似乎是一种浪费。例如,拥有一个可以监视自身变化的模型就是角度范围非常好的事情。重新设计一个完全独立的系统以在模型上做到这一点,然后将其与角度的$ watch/$ apply /等整合似乎有很多不必要的批量和复杂性,不是吗? – nicholas 2013-02-24 18:04:37

+2

我想这个问题变成了:有没有一个很好的模型层,可以很好地与角度玩呢?我已经快速浏览了角度资源,以及其他一些框架,比如微风和放大。有什么建议么? – nicholas 2013-02-24 18:11:43

+0

您绝对不应该重新实现观看模型更改。如果您需要观察这样的变化,则可能是因为您可能希望用户界面反映更改,因此应将该对象放在范围内。业务层中对事件的需求依然存在,但这与观察范围不同。业务层事件在发生重大更改时触发,例如保存对象,而不是更新对象上的属性。你仍然可以使用Angulars $ rootScope来发出这些事件。 – 2013-02-24 18:20:01