我发现 Angular 对模型的使用令人困惑。Angular 似乎采取了这样一种方法: 模型可以是任何你喜欢的东西——例如,Angular 不包含显式的模型类,你可以使用普通的 JavaScript 对象作为模型。
在我看到的几乎每个 Angular 示例中,模型实际上都是一个对象,要么是手工创建的,要么是通过 Resource 从 API 调用返回的。因为我研究的几乎每个 Angular 示例都很简单,通常模型数据存储在控制器中的 $scope 上,与模型相关的任何状态(例如选择)也存储在控制器中的 $scope 上。这对于简单的应用程序/示例来说很好用,但是当应用程序变得更加复杂时,这似乎过于简单化了。例如,如果上下文发生变化,存储在控制器中的模型状态有可能变成上下文状态并丢失; 存储 selectedGallery
和 selectedPhoto
的控制器只能存储全局 selectedImage
,而不是每个画廊一个 selectedPhoto
。在这种情况下,每个画廊使用一个控制器可能会解决这个问题,但是从 UI 的角度来看,这似乎是浪费的,可能是不合适的,也是不必要的。
Angular 对模型的定义似乎更接近于我认为的 VO/DTO,它是在服务器和客户机之间传递的哑对象。我的直觉是将这样一个对象包装在我认为的 Model 中——一个类,它维护与 DTO/VO 相关的状态(比如选择) ,根据需要提供修改器来操作 DTO/VO,并通知其余应用程序对底层数据的更改。显然,Angular 的绑定很好地处理了最后一部分,但是我仍然看到了前两个职责的强大用例。
然而,我还没有真正在我所看到的示例中看到这种模式的使用,但是我也没有看到我认为可伸缩的替代方案。Angular 似乎通过强制使用 Singleton 来隐含地阻止使用 Services 作为模型(我知道有办法绕过这一点,但它们似乎没有得到广泛使用或认可)。
那么我应该如何保持模型数据的状态呢?
[编辑] 这个问题中的第二个答案很有趣,和我现在使用的答案很接近。