【问题标题】:Is AngularJS really MVC?AngularJS 真的是 MVC 吗?
【发布时间】:2012-10-26 05:04:32
【问题描述】:

我正在查看the AngularJS home page 上的示例——特别是“添加一些控件”。我不太明白它是如何映射到 MVC 模式的。

模板(index.html)可以看成是视图,TodoCtrl 从 todo.js 构造的对象可以看成是控制器,但模型在哪里呢? ng-model 之类的属性映射到框架的一些内部部分,并且不直接公开我们可以称为模型的对象。

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

【问题讨论】:

    标签: javascript model-view-controller angularjs


    【解决方案1】:

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

    【讨论】:

    • 所以主页上的示例不是真正的 MVC 示例吗?我需要更深入地了解 AngularJS 中的 MVC 吗?
    • @PaulLysak 文档中有更多示例。您实际上并不需要单独的“模型”才能使其成为 MVC,而且 MVC 的定义无论如何都有些松散。在您所指的示例中,模型本质上是放在$scope 变量中的内容。它只是一个简单的模型,只在单个控制器中使用。
    • 谢谢你,澄清了很多!
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        见: https://www.pluralsight.com/blog/software-development/tutorial-angularjs-mvc-implementation

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

        【讨论】:

          猜你喜欢
          • 2011-03-23
          • 2012-05-31
          • 1970-01-01
          • 1970-01-01
          • 2013-06-11
          • 2014-08-02
          • 2011-07-02
          • 1970-01-01
          • 2014-02-21
          相关资源
          最近更新 更多