请回复
Angular 和 jQuery 都是用 Javascript 编写的库/框架。让我比较 Angular 和 Javascript 就像要求比较面包和面粉一样。
但是,用于 DOM 操作的浏览器 API 的实现方式与 Angular 完全不同,因此我假设这就是您的作业期望您识别的内容。需要关注的关键点是范式根本不同。 Angular 采用
声明式方法,而 DOM 和 jQuery 都是命令式。
声明式一种构建计算机程序结构和元素的风格,表达计算逻辑而不描述其控制流。 [声明性语言是一种描述你想要什么,而不是应该如何做的语言。这在很大程度上是 Angular 的指令方法。1]
势在必行
[一种风格],其中算法是按照显式步骤实现的。 [当我们使用 DOM API 或 jQuery 编写代码时,我们必须详细说明该过程的“方式”。1]
我们以数据绑定为例。我们想要将文本输入中的值绑定到标签中。
使用 DOM
<input type='text' id='bind-input'>
<label id='bind-output'></label>
还有我们的Javascript:
window.addEventListener('load', function() {
var input = document.getElement('bind-input'),
output = document.getElement('bind-output');
input.addEventListener('change', function() {
output.innerText = input.value;
});
});
我们必须非常具体地解释我们需要浏览器做什么。我们必须监听某些事件,确保 DOM 已加载,跟踪元素的 ID,所有这些都是为了在输入发生变化时更新我们的标签。
使用 jQuery
<input type='text' id='bind-input'>
<label id='bind-output'></label>
我们还需要一些Javascript:
$(document).ready(function() {
var $input = $('#bind-input'),
$output = $('#bind-output');
$input.on('change', function() {
$output.html($input.value());
});
});
如您所见,这与 DOM 方法非常相似。我们必须向浏览器
准确地解释我们想要它做什么。
有角度<input type='text' ng-model='bound'>
<label ng-bind='bound'></label>
我们甚至不需要编写任何代码即可与 Angular 一起使用! (显然我们需要在某个地方有一个空控制器,但你明白了)。
声明式方法主要是我们从实现细节中抽象出来的一种方法。 Angular 指令使得将这些常见行为包装成小的可重用组件变得非常容易,然后可以以声明的方式应用于我们的 HTML。