我发现Angular的模型使用混乱。 Angular似乎采取了一种模式可以是任何你喜欢的方式 – IE Angular不包括一个明确的模型类,你可以使用vanilla JavaScript对象作为模型。 在我看到的几乎每个Angular示例中,模型实际上都是一个对象,无论是由手工创build的,还是通过资源的API调用返回的。 因为几乎所有我看过的Angular示例都很简单,通常在$ scope中存储在控制器中的模型数据以及与模型相关的任何状态(例如select)也存储在控制器的$ scope中。 这对于简单的应用程序/示例来说工作得很好,但是当应用程序变得更加复杂时,这看起来很简单。 例如,存储在控制器中的模型状态有可能变为上下文,并且如果上下文改变则丢失。 存储selectedGallery和selectedPhoto控制器只能存储全局selectedImage ,而不是每个图库的selectedPhoto 。 在这种情况下,为每个图库使用一个控制器可能会否定这个问题,但是从UI的angular度来看,这样做看起来很浪费,可能是不适当和不必要的。 Angular对模型的定义似乎更接近于我认为VO / DTO是在服务器和客户端之间传递的哑对象。 我的本能就是将这样一个对象包裹在我认为是一个模型的类中 – 一个维护与DTO / VO相关的状态的类(比如select),根据需要提供增变器来操纵DTO / VO,并通知剩下的应用对底层数据的修改。 很明显,Angular的绑定很好地处理了最后一部分,但是我仍然看到前两个职责的强大用例。 然而,我并没有真正看到这个模式在我看过的例子中使用,但我也没有看到我会考虑一个可扩展的替代scheme。 Angular似乎暗中鼓励使用服务作为模型通过强制单身人士(我知道有办法解决这个问题,但似乎并没有广泛使用或批准)。 那么我应该如何保持模型数据的状态呢? [编辑]在这个问题的第二个答案是有趣的,接近我目前使用的。
我有一个ViewModel有一个复杂的对象作为其成员之一。 复杂的对象有4个属性(所有string)。 我试图创build一个可重用的局部视图,我可以传入复杂的对象,并使用html助手为其属性生成html。 这一切都很好。 但是,当我提交表单时,模型联编程序没有将值映射回ViewModel的成员,所以我没有得到任何东西在服务器端。 如何读取用户input到复杂对象的html助手的值。 视图模型 public class MyViewModel { public string SomeProperty { get; set; } public MyComplexModel ComplexModel { get; set; } } MyComplexModel public class MyComplexModel { public int id { get; set; } public string Name { get; set; } public string Address { get; set; } …. } 调节器 […]