为什么模型和控制器的概念在Angular.JS中混杂在一起?

时间:2015-12-09 04:46:45

标签: javascript asp.net angularjs asp.net-mvc

我是Angular世界的新手,我主要使用.NET MVC架构,其中模型和控制器等实体之间有清晰的界限。

在我看来,这一点很清楚:

  • 模型是数据的容器
  • 控制器基本上是在客户端处理业务和View之间交互的函数的集合

它们是两个单独的文件和两个不同的类型。没有人可以在asp.net视图和asp.net控制器之间混淆

然而,在Angular世界(显然是MVC架构)中,控制器看起来像下面链接中描述的内容:

https://scotch.io/tutorials/making-skinny-angularjs-controllers

对我来说,按照.NET标准,这是模型和控制器的混合体,因为它不仅携带数据(像模型)而且还带有函数**(就像Controller < /强>)**。不仅如此,模型实际上是Controller的一部分。

我的问题是,如果Angular中的模型看起来像上面链接中描述的模型,那么模型本身是什么样的?

3 个答案:

答案 0 :(得分:3)

模型($ scope)和视图(HTML)之间存在分离。

是的,在视图中调用$ scope的方法,但这些方法本质上是控制器操作 - 它们是从控制器函数的闭包执行的。

 app.controller('ctrl', function($scope) {
       $scope.data = 'hello';
       $scope.onclick = function(arg) {
             $scope.data = 'hello world!';
        }
 });

Microsoft ASPNET MVC与Angular MVC非常相似:

 MVC Controller = ngController
 ViewData/ViewBag = $scope
 Controller DI = Angular DI in controller function
 Razor View Engine = ngRepeat, ngShow, ngModel, etc
 RenderActions = Data-driven service-injected directives
 RenderPartials = Read-only directives (data retrieved by another controller)
 Click triggers controller action = ngClick triggers $scope handler in controller's function closure
 Model Data Binding = AngularJS Data Binding
 ModelState validation = ngModel validation
 HTTP handlers/modules = HTTP interceptors

让我想知道ASPNET MVC是否激发了Angular ......

注意:ViewData和$ scope类似,但当然,$ scopes通过$ scope继承解析$ scope属性,但在ASPNET MVC中,子ViewData不从父VIewData继承。嗯......微软,这将是一个有用的功能:)

答案 1 :(得分:3)

<强>模型

在AngularJS中,术语模型是指存储在范围内的数据,用于在视图内使用。它可以是硬编码的值/对象,也可以是存储在范围内的服务调用上收到的响应。

enter image description here

上面的图片清晰地展示了如何在视图上使用模型。 AngularJS还支持双向数据绑定。即更新视图(绑定到特定模型)也会更新模型值。

<强>控制器

控制器的目的是为表达式和指令公开变量和功能。

enter image description here

如上所示,控制器与范围相关联,并且可以在与相应控制器关联的视图上访问范围内定义的所有模型。控制器可用于定义业务逻辑和处理事件等。

答案 2 :(得分:0)

范围是Angular应用程序中非常重要的组件。范围是表示应用程序“模型”的对象。它包含存储通过模板呈现给用户的数据的字段,以及当用户执行某些操作(例如单击按钮)时可以调用的功能。 对于mOre infor,请转到链接 https://docs.angularjs.org/api/ng/directive/ngModel