为什么Angular称为MV*框架

Shr*_*yas 6 model-view-controller design-patterns mvvm angularjs

从我读到现在(这个答案正确),它更倾向于MVVM模式.将服务中的数据视为模型,将Angular控制器视为VM,将包含角度绑定的HTML视为View.

我们可以说MVC是服务器端的模式和客户端的MVVM吗?

有人可以用示例(在Angular的上下文中)解释我们如何实现MVC和MVVM.

我读过关于使用var vm = this的概念; 在角度控制器中.但这是否意味着只需为我们的控制器使用别名,我们将Angular应用程序从MVC转换为MVVM.

Sup*_*hne 14

首先我想,最好先了解一下MVC和MVVM.

不仅仅是描述更多的理论背景.我宁愿用一个简单的例子来解释.让我们买一个披萨.

MVC - 当你打电话给披萨中心并交付时,会发生什么.

  • 您呼叫呼叫中心人(控制器)并下订单(输入).
  • 然后呼叫中心盖伊(控制器)安排一些厨师(模型)制作披萨,送货员(视图)来提供披萨.
  • 然后Delivery Guy(View)从Cooks(Model)获取披萨,将其包好(输出)并交付给您.

MVVM - 更像是,当你去商店并将订单交给服务员时会发生什么.

  • 您将订单(输入)下放到服务员(查看).
  • 服务员(查看)将您订购到咖啡厅经理(查看模型).
  • 咖啡厅经理(查看模型)安排一些厨师(模型)来制作比萨饼.
  • Cooks(Model)准备好并将其传递给Cafe Manager(View Model).
  • 然后咖啡厅经理(查看模型)把它放入一个漂亮的盘子,添加叉/刀,酱汁机等(演示).
  • 服务员(查看)跟踪Cafe Manager(查看模型).一旦准备好,服务员(View)就会送给你.

在此输入图像描述

回到你的问题时,

我们可以说MVC是服务器端的模式和客户端的MVVM吗?

我能说的是一般是的.(可能有一些角落案例).我希望,您可以使用我的上述解释来更好地处理您的问题.

除了你所提到的AngularJS,在架构中,它与MVVM非常接近(我这样说是因为它更像是没有答案).虽然我们在AngularJS中有控制器,但实际上它们完全是View-Models的工作.

----------使用AngularJS更新特定示例----------

因为我想在Angular架构中保持我们的范围.我正在举一个例子.

在此输入图像描述

  • 您有要使用AngularJS实现的组件的HTML模板.[视图]
  • 那个HTML模板绑定到一个Controller,在里面你可能会有类似的东西this.controllerAs = vm.实际上这个术语vm指的是视图模型.[视图模型]

理想情况下,在此控制器中,我们不应实现特定于业务的逻辑.如果您希望它们包含在客户端,您应该有单独的工厂,服务(自定义)等来做到这一点.您可以做的是,您可以在控制器中包含那些(工厂,服务)并调用其所需的功能/方法来执行所需的操作.否则,您可以考虑在服务器端使用业务逻辑并使用内置服务(例如:$ http)来调用它们.

因此,在控制器内部,我们只有绑定的实现才能查看我们想要的逻辑(显示要求).

  • 正如我在第二点中提到的,您有[自定义工厂,服务]或[REST服务集+ $ http],它包含您的业务逻辑.[模型]

所以在沟通流程中真正发生的是,

  • 客户端(最终用户/另一个组件)优选地通过一些输入调用/启动HTML(视图).
  • 然后控制器(View-Model)获取输入并知道所需任务是什么.
  • 然后,控制器调用它内部的工厂,服务等(模型),以准备绑定到给定输入的所需业务特定输出.
  • 然后,Model处理输入并将所需的输出提供给控制器.
  • 然后控制器进行一些显示特定的调整.
  • 然后将显示HTML.