专栏名称: 前端JavaScript
分享 | 学习 | 交流 | 原创 分享是学习的开始;学习不必要从头开始,是从现在开始;交流能沟通你我,提高你的学识;期待你的加入!!! web前端技术交流,JavaScript,HTML5,CSS3……
目录
相关文章推荐
51好读  ›  专栏  ›  前端JavaScript

Angular开发者指南(二)概念概述

前端JavaScript  · 公众号  · Javascript  · 2017-03-10 07:19

正文

template(模板):带有附加标记的模板HTML

directives(指令):使用自定义属性和元素扩展HTML

model(模型):用户在视图中显示的数据,并与用户进行交互

scope(作用域):存储模型的上下文,以便控制器,指令和表达式可以访问它

expressions(表达式):访问范围中的变量和函数

compiler(编译器):解析模板并实例化指令和表达式

filter(过滤器):格式化表达式的值以显示给用户

view(视图):用户看到的内容(DOM)

Data Binding(数据绑定):在模型和视图之间同步数据

controller(控制器):视图后面的业务逻辑

Dependency Injection:创建并连接对象和函数

injector(注入器):依賴注入容器

module(模块):一个用于应用程序不同部分的容器,包括控制器,服务,过滤器,配置Injector的指令

service (服务):可重用的业务逻辑独立于视图


第一个例子:数据绑定

在下面的示例中,我们将构建一个表单来计算不同货币的发票成本。

让我们从数量和成本的输入字段开始,其值相乘以产生发票总额:


  Invoice:

 

    Quantity:

 

 

    Costs:

 

 

    Total: {{qty * cost | currency}}

 

这看起来像正常的HTML,有一些新的标记。 在AngularJS中,像这样的文件称为模板。 当AngularJS启动你的应用程序时,它使用编译器从模板解析和处理这个新的标记。 加载,转换和渲染的DOM然后称为视图。

第一种新的标记是指令。 它们对HTML中的属性或元素应用特殊的行为。 在上面的例子中,我们使用ng-app属性,它链接到一个自动初始化我们的应用程序的指令。 AngularJS还定义了一个为元素添加额外行为的输入元素的指令。 ng-model指令存储/更新输入字段的值到/自变量。

访问DOM的自定义指令:在AngularJS中,应用程序应该访问DOM的唯一位置是指令内。 这很重要,因为访问DOM的工件难以测试。 如果你需要直接访问DOM,你应该为它写一个自定义指令。 

第二种新的标记是双花括号{{expression | filter}}:当编译器遇到这个标记时,它将用标记的估计值替换它。 模板中的表达式是一个类似JavaScript的代码片段,它允许AngularJS读取和写入变量。 请注意,这些变量不是全局变量。 就像JavaScript函数中的变量存在于作用域中一样,AngularJS为表达式可访问的变量提供了一个作用域。 存储在作用域上的变量中的值在文档的其余部分中称为模型。 应用于上面的示例,标记指示AngularJS“获取从输入小部件获取的数据并将它们相乘”。

上面的示例还包含一个过滤器。 过滤器格式化表达式的值以显示给用户。 在上面的示例中,过滤器货币将数字格式化为看起来像金钱的输出。

在示例中重要的是,AngularJS提供活动绑定:每当输入值更改时,表达式的值都会自动重新计算,并使用其值更新DOM。 这背后的概念是双向数据绑定。

添加UI逻辑:控制器


invoice1.js


angular.module('invoice1', [])

.controller('InvoiceController', function InvoiceController() {

  this.qty = 1;

  this.cost = 2;

  this.inCurr = 'EUR';

  this.currencies = ['USD', 'EUR', 'CNY'];

  this.usdToForeignRates = {

    USD: 1,

    EUR: 0.74,

    CNY: 6.09

  };


  this.total = function total(outCurr) {

    return this.convertCurrency(this.qty * this.cost, this.inCurr, outCurr);

  };

  this.convertCurrency = function convertCurrency(amount, inCurr, outCurr) {

    return amount * this.usdToForeignRates[outCurr] / this.usdToForeignRates[inCurr];

  };

  this.pay = function pay() {

    window.alert('Thanks!');

  };

});


index.html


  Invoice:

 

    Quantity:

 

 

    Costs:

   

 

 

    Costs:

   

 

 

    Costs: