AngularJS 模型+Scope(作用域)+控制器+过滤器

AngularJS ng-model 指令模型)

ng-model 指令用于绑定应用程序数据到 HTML 控制器(input, select, textarea)的值。


ng-model 指令
ng-model 指令可以将输入域的值与 AngularJS 创建的变量绑定。

// AngularJS 实例
名字:

尝试一下 »


双向绑定
双向绑定,在修改输入域的值时, AngularJS 属性的值也将修改:

// AngularJS 实例
名字:

你输入了: {{name}}

你输入了:

尝试一下 »


验证用户输入

// AngularJS 实例
Email: 不是一个合法的邮箱地址

尝试一下 »
以上实例中,提示信息会在 ng-show 属性返回 true 的情况下显示。


应用状态
ng-model 指令可以为应用数据提供状态值(invalid, dirty, touched, error):

// AngularJS 实例
Email:

状态

{{myForm.myAddress.$valid}} {{myForm.myAddress.$dirty}} {{myForm.myAddress.$touched}}

尝试一下 »


CSS 类
ng-model 指令基于它们的状态为 HTML 元素提供了 CSS 类:

// AngularJS 实例


输入你的名字:

尝试一下 »
ng-model 指令根据表单域的状态添加/移除以下类:

  • ng-empty
  • ng-not-empty
  • ng-touched
  • ng-untouched
  • ng-valid
  • ng-invalid
  • ng-dirty
  • ng-pending
  • ng-pristine


AngularJS Scope(作用域)

Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带。
Scope 是一个对象,有可用的方法和属性。
Scope 可应用在视图和控制器上。

AngularJS 模型+Scope(作用域)+控制器+过滤器_第1张图片
AngularJS 模型+Scope(作用域)+控制器+过滤器_第2张图片

如何使用 Scope

当你在 AngularJS 创建控制器时,你可以将 $scope 对象当作一个参数传递:

// AngularJS 实例
// 控制器中的属性对应了视图上的属性:

{{carname}}

尝试一下 »
当在控制器中添加 $scope 对象时,视图 (HTML) 可以获取了这些属性。
视图中,你不需要添加 $scope 前缀, 只需要添加属性名即可,如: {{carname}}


Scope 概述

AngularJS 应用组成如下:

  • View(视图), 即 HTML。
  • Model(模型), 当前视图中可用的数据。
  • Controller(控制器), 即 JavaScript 函数,可以添加或修改属性。

scope 是模型。
scope 是一个 JavaScript 对象,带有属性和方法,这些属性和方法可以在视图和控制器中使用。
AngularJS 实例
如果你修改了视图,模型和控制器也会相应更新:

我的名字是 {{name}}

尝试一下 »


Scope 作用范围

了解你当前使用的 scope 是非常重要的。
在以上两个实例中,只有一个作用域 scope,所以处理起来比较简单,但在大型项目中, HTML DOM 中有多个作用域,这时你就需要知道你使用的 scope 对应的作用域是哪一个。
AngularJS 实例
当我们使用 ng-repeat 指令时,每个重复项都访问了当前的重复对象:

  • {{x}}

尝试一下 »
每个 < li> 元素可以访问当前的重复对象,这里对应的是一个字符串, 并使用变量 x 表示。


根作用域

所有的应用都有一个 $rootScope,它可以作用在 ng-app 指令包含的所有 HTML 元素中。
$rootScope 可作用于整个应用中。是各个 controller 中 scope 的桥梁。用 rootscope 定义的值,可以在各个 controller 中使用。
AngularJS 实例
创建控制器时,将 $rootScope 作为参数传递,可在应用中使用:

{{lastname}} 家族成员:

  • {{x}} {{lastname}}


AngularJS 控制器

AngularJS 控制器 控制 AngularJS 应用程序的数据。
AngularJS 控制器是常规的 JavaScript 对象


AngularJS 控制器

AngularJS 应用程序被控制器控制。
ng-controller 指令定义了应用程序控制器。
控制器是 JavaScript 对象,由标准的 JavaScript 对象的构造函数 创建。
AngularJS 实例

名:
姓:

姓名: {{firstName + " " + lastName}}

尝试一下 »
应用解析:
AngularJS 应用程序由 ng-app 定义。应用程序在

内运行。
ng-controller="myCtrl" �属性是一个 AngularJS 指令。用于定义一个控制器。
myCtrl 函数是一个 JavaScript 函数。
AngularJS 使用$scope 对象来调用控制器。
在 AngularJS 中, $scope 是一个应用对象(属于应用变量和函数)。
控制器的 $scope (相当于作用域、控制范围)用来保存AngularJS Model(模型)的对象。
控制器在作用域中创建了两个属性 (firstNamelastName)。
ng-model 指令绑定输入域到控制器的属性(firstName 和 lastName)。


控制器方法

上面的实例演示了一个带有 lastName 和 firstName 这两个属性的控制器对象。
控制器也可以有方法(变量和函数):

AngularJS 实例

名:
姓:

姓名: {{fullName()}}

尝试一下 »


外部文件中的控制器

在大型的应用程序中,通常是把控制器存储在外部文件中。
只需要把

尝试一下 »


其他实例
以下实例创建一个新的控制器文件:

angular.module('myApp', []).controller('namesCtrl', function($scope) { 
  $scope.names = [ 
    {name:'Jani',country:'Norway'}, 
    {name:'Hege',country:'Sweden'}, 
    {name:'Kai',country:'Denmark'}
  ];
});

保存文件为 namesController.js:
然后,在应用中使用控制器文件:
AngularJS 实例

  • {{ x.name + ', ' + x.country }}

尝试一下 »



AngularJS 过滤器

过滤器可以使用一个管道字符(|)添加到表达式和指令中。

AngularJS 过滤器

AngularJS 过滤器可用于转换数据:

AngularJS 模型+Scope(作用域)+控制器+过滤器_第3张图片

表达式中添加过滤器

过滤器可以通过一个管道字符(|)和一个过滤器添加到表达式中。.
((下面的两个实例,我们将使用前面章节中提到的 person 控制器))
uppercase 过滤器将字符串格式化为大写:
AngularJS 实例

姓名为 {{ lastName | uppercase }}


尝试一下 »
lowercase 过滤器将字符串格式化为小写:
AngularJS 实例

姓名为 {{ lastName | lowercase }}

尝试一下 »


currency 过滤器

currency 过滤器将数字格式化为货币格式:
AngularJS 实例

总价 = {{ (quantity * price) | currency }}

尝试一下 »


向指令添加过滤器

过滤器可以通过一个管道字符(|)和一个过滤器添加到指令中。
orderBy 过滤器根据表达式排列数组:
AngularJS 实例

  • {{ x.name + ', ' + x.country }}

尝试一下 »


过滤输入

输入过滤器可以通过一个管道字符(|)和一个过滤器添加到指令中,该过滤器后跟一个冒号和一个模型名称。
filter 过滤器从数组中选择一个子集:
AngularJS 实例

  • filter:test | orderBy:'country'"> {{ (x.name | uppercase) + ', ' + x.country }}

尝试一下 »

你可能感兴趣的:(AngularJS 模型+Scope(作用域)+控制器+过滤器)