27

我正在浏览AngularJS 主页上的示例——特别是“添加一些控件”。我不太明白它如何映射到 MVC 模式。

模板(index.html)可以被认为是视图,或由 todo.js 中的 TodoCtrl 构造的对象作为控制器,但模型在哪里呢?诸如ng-model映射到框架的一些内部部分的属性并不直接暴露我们可以称为模型的对象。

将 AngularJS 称为 MVC 框架是否正确?

4

4 回答 4

23

MVC 背后的核心思想是,您的代码在管理其数据(模型)、应用程序逻辑(控制器)和向用户呈现数据(视图)之间有明确的分离。视图从模型中获取数据以显示给用户。当用户通过单击或键入与应用程序交互时,控制器会通过更改模型中的数据来响应。最后,模型通知视图发生了变化,以便它可以更新它显示的内容。 在 Angular 应用程序中,视图是文档对象模型 (DOM),控制器 是 JavaScript 类,模型数据存储在对象属性中。

于 2014-10-30T05:33:21.267 回答
7

我还没有读过Angular。但是,请记住,“真正的”MVC 意味着模型包含业务逻辑,控制器负责将用户输入传递给模型,视图从模型中获取自己的数据。许多所谓的 MVC 框架实际上并没有以正确的方式实现 MVC:它们使 Controller 承担了太多责任,例如让 Controller 也负责更新 View。这不是控制器的意图,在这种情况下,您会得到所谓的“胖控制器”。许多 web 开发人员有一个误解,即视图只是一个“模板”。这既是对的,也是错的;它是一个模板,但它直接从模型中获取自己的数据——而不是通过控制器。

但正如我开始说的:我还没有阅读过关于 Angular 的文章,但你自己可能已经阅读过,你应该能够通过查看框架中不同组件的作用来确定 Angular 是否真的是一个 MVC 框架。

于 2013-12-07T02:12:54.177 回答
3

属性映射到控制器中定义的范围变量。例如,如果您有一些代表您的业务逻辑的 JS 对象,您可以将它们放在范围变量中,然后属性可以映射到模型本身,而不是范围变量中的一些任意值。

于 2012-11-06T10:51:53.017 回答
2

如果任何可以在对象中存储数据的东西都被视为模型,那么每个前端框架(视图)都可以被视为具有模型。它们都可以将数据存储在对象中并在视图中呈现它们。我认为将 Angular 称为 mvc 确实是一种营销策略,试图让 Angular 看起来比它本身更重要。

请参阅: https ://www.pluralsight.com/blog/software-development/tutorial-angularjs-mvc-implementation

在控制器中,他们给出了 angular 作为模型的示例。如果它不能帮助存储持久数据,那么它就不是一个模型。

于 2017-09-29T18:03:25.840 回答