gpt4 book ai didi

javascript - AngularJS 是如何做的(是什么让它打勾)

转载 作者:行者123 更新时间:2023-11-29 21:44:48 26 4
gpt4 key购买 nike

我正在研究 AngularJS,尝试学习基础知识。在 JavaScript 和服务器编程、HTTP 等方面非常有经验,所以我确实了解它的作用。我正在 YouTube 上观看 Curran Keller 的“50 个示例”教程(下面的链接),并且我找到了很多关于 Angular 做什么的文档...但如何 它做到了。粗略了解 Angular 如何能够完成所有这些巧妙的事情——它“只是”一个 JavaScript 包装器,在 Web 浏览器中执行——当我编写我的第一个 Angular“应用程序”(带有元数据的网页)时会很有帮助-增强的 JS,正如我目前所想的那样)。 ;-) 这应该让讨论继续下去!

所以,这是我认为到目前为止收集到的内容:

Angular JS JavaScript。它通过 .js 文件在浏览器中运行,因此最终指令和标签以及“Angular 代码”( Controller )被翻译成 JavaScript,这才是在浏览器中实际运行的内容。

因此,Angular 实际上“只是”普通 JavaScript 对象的包装器库。我想这是重点;它是对原本相当复杂的“原生”JavaScript 代码的简化。例如,而不是实例化 XMLHttpRequest对象,并使用它来 GET 或 POST 一些数据到/从服务器,Angular 提供了一个 $http 服务。您只需要输入 $http.get();

此外,当用户使用页面时,Angular 在 UI 中具有强大的动态传播变化。几乎就像在 Excel 中一样,如果某处更改了一段数据,则相同数据的所有其他用法/引用(即变量、HTML 表单元素,或者只是使用 {{myVariable}} 输出到 HTML 的变量)都会相应更新。自动地,立即地。

另一个很酷的特性是使用 Angular 指令增强 HTML 标签。这是一种从 Angular(即 JavaScript)内存中的内容动态生成 HTML 输出(或纯文本)的非常简单的方法。同样,这可以使用普通的 JS 来完成,遍历 DOM 并插入子元素,但 Angular 减轻了对任何复杂编码的需求。所有你需要编程的是<li ng-repeat="name in names">{{name}}</li>

那么,Angular 是如何“只”使用 JavaScript 实现这一切的呢?显然,与 GetElementById 一样, JavaScript 可以访问(读取)和解析 HTML DOM,所以我认为 Angular 首先读取整个文档并查找带有 ng-app 的任何 HTML 标记。指示。这些被进一步解析,Angular 代码被转换为生成额外的 HTML 输出(例如 ng-repeat ),或者被翻译成嵌入式 JavaScript(如 $scope.name=''; )。

我在文档中找不到答案的一件事是美元符号的作用。我认为我知道答案,但我没有信心。由于 Angular 拥有自己的类似 JavaScript 的编程语言,因此 Angular 需要能够区分 JavaScript 部分(例如 HTML FORM 元素中使用的变量)和 Angular 对象。我的意思是,什么是 Angular 函数调用以及它们的输入/参数是什么。在 Angular 单词前面加上 $ 可以让 Angular JS 翻译器知道什么不应该翻译,可以这么说吗?

也许有人可以跟进此事,纠正我的错误?

Curran Keller 的“50 个示例中的 Angular.js 简介”(http://youtu.be/TRrL5j3MIvo) 中的示例是一个很好的引用。例如,也许下面的简单示例可以作为起点?在这个例子中,我想知道(除了上述想法之外)$scope 的具体目的是什么?目的。我们可以将它重命名为 $whatever,还是“scope”是一个保留字?

<html ng-app="nameApp">
<head>
<meta charset="utf-8">
<title>Angular.js Example 14</title>
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.min.js"></script>
<script>
var nameApp = angular.module('nameApp', []);
nameApp.controller('NameCtrl', function ($scope) {
$scope.names = ['Larry', 'Curly', 'Moe'];
});
</script>
</head>
<body ng-controller="NameCtrl">
<ul>
<li ng-repeat="name in names">{{name}}</li>
</ul>
</body>
</html>

最佳答案

One thing I've had trouble finding an answer to in the documentation, is what the dollar signs do.

美元符号只是为 Angular 和 JQuery 保留的命名约定。它只是为了提高可读性,以便快速辨别什么是 Angular/JQuery 函数。参见 http://google.github.io/styleguide/angularjs-google-style.html#dollarsign .

In this example, I'm wondering (in addition to the above thoughts) what specifically is the purpose of the $scope object. Can we rename it to $whatever, or is "scope" a reserved word?

$scope比较特殊,指的是应用模型。请参阅 docs.angularjs.org/guide/scope 和 docs.angularjs.org/guide/controller(无法发布直接链接,因为我还没有声誉 :( ))。

在上面的示例中,$scope 用于在 Controller 和 DOM 之间进行通信。 DOM 只能引用 Angular 绑定(bind)范围内的项目。分解上面的例子:

<body ng-controller="NameCtrl">

这会实例化名为 NameCtrl 的 Controller ,并在 DOM 和 NameCtrl 实例之间设置相同的 $scope。该元素和所有子元素现在可以引用与 NameCtrl 相同的 $scope。

$scope.names = ['Larry', 'Curly', 'Moe'];

这是 Controller 将模型设置为 Larry/Curly/Moe 以供 DOM 使用的地方。

<li ng-repeat="name in names">{{name}}</li>

“names”指的是 NameCtrl 中相同的 $scope.names(记住,您不是从 DOM 中编写 $scope)。每当 Controller NameCtrl 更新 $scope.names 时,DOM 也会更新,为数组 'names' 中的每个元素创建一个列表项,并且每个元素也有自己的 $scope。

我建议阅读一些 AngularJS 教程应用程序会有很大帮助:docs.angularjs.org/tutorial/

关于javascript - AngularJS 是如何做的(是什么让它打勾),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31609507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com