2015-11-06 79 views
4

我在AngularJS是绝对新的,我发现了一些困难,试图了解它究竟是如何实现MVC模式。AngularJS中的模块究竟是什么?

所以我有与此相关的例子这第一疑惑中,我有2个文件:

1)的index.htm

<!DOCTYPE html> 
<html lang="en-us" ng-app="angularApp"> 
    <head> 
     <title>Introduction to AngularJS</title> 
     <meta http-equiv="X-UA-Compatible" content="IE=Edge"> 
     <meta charset="UTF-8"> 

     <!-- load bootstrap and fontawesome via CDN --> 
     <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" /> 
     <style> 
      html, body 
      { 
       font-size: 1.1em; 
      } 
     </style> 

     <!-- load angular via CDN --> 
     <script src="//code.angularjs.org/1.3.0-rc.1/angular.min.js"></script> 
     <script src="app.js"></script> 
    </head> 
    <body> 

     <header> 
      <nav class="navbar navbar-default"> 
      <div class="container"> 
       <div class="navbar-header"> 
        <a class="navbar-brand" href="/">AngularJS</a> 
       </div> 

       <ul class="nav navbar-nav navbar-right"> 
        <li><a href="#"><i class="fa fa-home"></i> Home</a></li> 
       </ul> 
      </div> 
      </nav> 
     </header> 

     <div class="container"> 

      <!-- This div and its content is the view associated to the 'mainController': --> 
      <div ng-controller="mainController"> 

       <h1>Hello world!</h1> 

      </div> 

     </div> 

    </body> 
</html> 

2)app.js文件:

/* MODULE: one signgle object in the global namespace. 
      Everything indise the element having ng-app="angularApp" custom attribute is connected to the angularApp variable into the 
      global namespace 
*/ 
var angularApp = angular.module('angularApp', []); 

// CONTROLLERS 
angularApp.controller('mainController', ['$scope', function ($scope) { 

}]); 

我发现一些困难,试图确定谁是型号,谁是控制器,谁是VIEW

所以,在我看来明白NG-应用= “angularApp”上的HTML标签定义的属性:

<html lang="en-us" ng-app="angularApp"> 

绑定整个的index.htm页的angularApp变量

var angularApp = angular.module('angularApp', []); 

那么究竟代表angularApp变量?它是一个角度模块?以及Angular中的模块究竟代表什么?

+1

我只有用自己的角度最小的经验,但据我了解,该模块在MVC模式中执行控制器的角色。在模块内部是视图中每个动态元素的“模型”。那些被声明为这样的'$ scope.PropertyA = blah;'或者可能是一个函数而不是一个值。 – Bardicer

+0

@Nick所以我可以说$ scope对象与Java MVC应用程序的模型对象(PO​​JO)类似? – AndreaNobili

+0

因为我没有Java经验,所以我无法真正回答这个问题。 – Bardicer

回答

2

你真的应该读https://docs.angularjs.org/guide。还有一个非常好的教程,可以回答你所有的问题https://docs.angularjs.org/tutorial

最终,我发现,有没有办法解决它。 AngularJs是一个复杂的框架,它有一个陡峭的学习曲线。


<html lang="en-us" ng-app="angularApp"><html>标签的内容是由angularApp应用控制,但index.html的不是view,你可能认为。您应该考虑将view作为directive(即Angular组件)附带的模板。

的角概念的快速回顾是在这里:https://docs.angularjs.org/guide/concepts

模块 - 用于一个应用程序的不同部分,包括 控制器,服务,过滤器,指令该配置 注射器

查看一个容器 - 什么用户看到(的DOM)

控制器 - 意见背后商业逻辑

1

要了解Angularjs,你不仅要在MVC模式留下来,与角度你可以使用这个模式,但它更MV *,模型 - 视图 - 无论您需要什么。

所以变量angularApp包含了他所有的依存关系,控制器,供应商,服务等等,一个模块可以是部分或全部应用它给你angularApp模块。

2

angularjs.org文档

什么是模块?您可以将模块视为您应用程序的不同部分(控制器,服务,过滤器, 指令等)的容器。

为什么?大多数应用程序都有一个主要方法,用于将应用程序的不同部分连接起来并将 连接在一起。

Angular应用程序没有主要方法。相反,模块声明 指定如何引导应用程序。这种方法有几个优点:

声明性过程更容易理解。您可以将代码 打包为可重复使用的模块。这些模块可以按任意顺序加载(或者甚至并行),因为模块会延迟执行。单元测试只需要加载相关模块 ,这使得它们保持快速。端到端测试可以使用 模块来覆盖配置。

话虽这么说,模块是你的应用程序。您的模块中,你可以有控制器和模型中的应用..