这个AngularJS是如何工作的;HelloWorld"应用有些人怀疑Angular是如何实现MVC模式的
How works this AngularJS "HelloWorld" application? Some doubts about how Angular implement MVC pattern
我是AngularJS的新手,我正在学习一门课程,该课程展示了AngularJS应用程序的第一个示例,我对其具体工作方式有一些疑问。
所以它是由以下两个文件组成的:
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 insise 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) {
}]);
所以我对它究竟是如何运作的有些怀疑。
根据我对app.js文件的理解,它被定义为一个模块,基本上是在我的应用程序的全局命名空间中定义的单个对象。但是,AngularJS中的模块究竟代表什么?我来自Spring MVC框架(以及其他一些经典MVC),其中的模块表示必须显示在视图中的数据。
在Angular中,究竟代表什么?
因此,据我所知,这个模块与整个index.htm页面绑定,因为在HTML中声明:
<html lang="en-us" ng-app="angularApp">
所以我认为html页面上的ng-app="angularApp"意味着angularApp模块与index.html页面内部发生的事情有关。我的推理是正确的还是错误的?
然后在app.js文件中,还定义了控制器:
// CONTROLLERS
angularApp.controller('mainController', ['$scope', function ($scope) {
}]);
这个mainController控制器(它是控制器名称吗?)是在angularApp模型对象上定义的。
好吧,我不太喜欢JavaScript,但我认为它的工作方式如下:
mainController变量是一个JavaScript对象,在前一行中,我添加了一个名为mainController控制器字段,控制器逻辑由与该新字段关联的函数实现(因为在JavaScript中,函数可以是对象的字段)。
我的推理是真的,还是我遗漏了控制器声明的一些内容?
另一个疑问与'$scope'变量的使用有关。究竟是什么意思?语法是什么意思?
该控制器与index.htm页面的特定部分表示的特定视图相关联,该视图为:
<!-- This div and its content is the view associated to the 'mainController': -->
<div ng-controller="mainController">
<h1>Hello world!</h1>
</div>
这让我产生了一些困惑,因为它似乎与我在其他Java MVC实现中看到的非常不同。
因此,与Java MVC实现不同的是,在AngularJS中,视图不是一个完整的页面(在Java中可能是.jsp页面),而是HTML页面的一部分,通过ng-controller="mainController"自定义属性绑定到特定的控制器。这是真的吗?
与Java MVC实现不同的是,在AngularJS中(或在前面的示例中),模型不仅是包含要显示到视图中的值字段的对象,而且是应用程序的全局命名空间中的对象,与执行指定视图操作的控制器(作为模型的字段)相关联。
我的推理是正确的还是遗漏了什么?
一切都很好,您的控制器和视图都很好。下一步,您现在需要创建一个服务来绑定服务器API,并像您的模型一样工作。
事实上,角度"控制器"可以像模型一样工作,但如果你只想在那里做控制器/监听器的事情,你需要创建一个真正的服务,比如:
示例:
app.service('ContactService', function () {
//'var' act like private
var contacts = [{
id: 0,
name: 'hello world'
}];
//'this' act like public (cool for java dev, you should feel like home :) )
this.save = function (contact) {
//here connect to your api or stay offline
}
this.get = function (id) {
}
this.delete = function (id) {
}
this.list = function () {
return contacts;
}
});
您的控制器
angularApp.controller('mainController', ['$scope','ContactService', function ($scope,ContactService) {
$scope.contact = ContactService.get(0)
}]);
视图
<div ng-controller="mainController">
<h1>{{contact.name}}</h1>
</div>
- Angular JS IE9 Hashbang url rewriting
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 使用angular重定向到html页面
- angular.js没有'无法在PhoneGap中处理视图标记
- Javascript(Angular)从一个对象数组到第二个数组查找值
- angular 1.5应用程序中的导航栏
- angular的下拉菜单
- Angular只从数组中获取所需的数据
- 如何将不可变的js导入angular 2(alpha)
- Angular js-返回一个包含类似
- 如何使用 Angular JS 将数据保存在数据库中
- 将JSON对象传递给angular指令
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- Angular:更新一次性绑定的数据
- 同步调用,直到用户通过angular验证为访问者
- 将Angular js与taglib结合使用
- 在Angular Fullstack中设置TinyMCE
- 这个AngularJS是如何工作的;HelloWorld"应用有些人怀疑Angular是如何实现MVC模式的