这个 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 中的 module 到底是什么?我来自 Spring MVC 框架(和其他一些经典的 MVC),其中模块代表必须显示在视图中的数据。
在Angular中究竟代表什么?
据我了解,此模块与整个 index.htm 页面绑定,因为在 HTML 中声明:
<html lang="en-us" ng-app="angularApp">
所以我认为 html 页面上的 ng-app="angularApp" 意味着 angularApp 模块与 index.html 页面中发生的事情有关。我的推理是对还是错?
然后在 app.js 文件中还定义了一个 controller:
// CONTROLLERS
angularApp.controller('mainController', ['$scope', function ($scope) {
}]);
这个mainController控制器(是mainController控制器名称吗?)定义在angularApp模型对象。
好吧,我不太喜欢 Java脚本,但我认为它的工作方式如下:
mainController 变量是一个 JavaScript 对象,在上一行我添加了一个名为 mainController 的控制器字段并且控制器逻辑由与这个新字段关联的函数实现(因为在 Java脚本中,函数可以是对象的字段)。
我的推理是正确的还是我遗漏了控制器声明的某些内容?
另一个疑问与'$scope'变量的使用有关。究竟是什么意思?语法 ['$scope', function ($scope) { ....CONTROLLER LOGIC....}] 的含义是什么?
此控制器关联到由 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 页面)但是它是通过 ng-controller="mainController" 自定义属性绑定到特定控制器的 HTML 页面的一部分。是真的吗?
而且与 Java MVC 实现不同的是,在 AngularJS(或前面的示例)中,模型不仅是一个包含要显示到视图中的固定字段的对象,而且它是应用程序全局命名空间中的一个对象,与在指定视图上执行操作的控制器(作为模型的字段)相关联。
我的推理正确还是我遗漏了什么?
一切正常,您的控制器和您的视图都正常。
下一步,您现在需要创建一个服务来绑定服务器 API 并像您的模型一样工作。
事实上,angular 'controller' 可以像模型一样工作,但如果你只想在那里做 controller/listeners 事情,你需要像这样创建一个真正的服务:
例子:
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>
我绝对是 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 中的 module 到底是什么?我来自 Spring MVC 框架(和其他一些经典的 MVC),其中模块代表必须显示在视图中的数据。
在Angular中究竟代表什么?
据我了解,此模块与整个 index.htm 页面绑定,因为在 HTML 中声明:
<html lang="en-us" ng-app="angularApp">
所以我认为 html 页面上的 ng-app="angularApp" 意味着 angularApp 模块与 index.html 页面中发生的事情有关。我的推理是对还是错?
然后在 app.js 文件中还定义了一个 controller:
// CONTROLLERS
angularApp.controller('mainController', ['$scope', function ($scope) {
}]);
这个mainController控制器(是mainController控制器名称吗?)定义在angularApp模型对象。
好吧,我不太喜欢 Java脚本,但我认为它的工作方式如下:
mainController 变量是一个 JavaScript 对象,在上一行我添加了一个名为 mainController 的控制器字段并且控制器逻辑由与这个新字段关联的函数实现(因为在 Java脚本中,函数可以是对象的字段)。
我的推理是正确的还是我遗漏了控制器声明的某些内容?
另一个疑问与'$scope'变量的使用有关。究竟是什么意思?语法 ['$scope', function ($scope) { ....CONTROLLER LOGIC....}] 的含义是什么?
此控制器关联到由 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 页面)但是它是通过 ng-controller="mainController" 自定义属性绑定到特定控制器的 HTML 页面的一部分。是真的吗?
而且与 Java MVC 实现不同的是,在 AngularJS(或前面的示例)中,模型不仅是一个包含要显示到视图中的固定字段的对象,而且它是应用程序全局命名空间中的一个对象,与在指定视图上执行操作的控制器(作为模型的字段)相关联。
我的推理正确还是我遗漏了什么?
一切正常,您的控制器和您的视图都正常。 下一步,您现在需要创建一个服务来绑定服务器 API 并像您的模型一样工作。
事实上,angular 'controller' 可以像模型一样工作,但如果你只想在那里做 controller/listeners 事情,你需要像这样创建一个真正的服务:
例子:
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>